WA了四个点,求助!
查看原帖
WA了四个点,求助!
109270
seven_sin楼主2021/8/19 08:14

如题,

#include "iostream"
#include "cstdio"
using namespace std;
#define max(a,b) a>b?a:b
int n,m,C;
long long dp[100010];
inline long long read()
{
	long long x=0,f=1;char s=getchar();
	while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
	while(s>='0'&&s<='9')x=(x<<3)+(x<<1)+s-'0',s=getchar();
	return x*f;
}
inline void zeronepack(long long x,long long y,long long z){
long long t=1;
while(t<=z)	{
long long v=x*t,w=y*t;
for(int i=C;i>=v;i--) dp[i]=max(dp[i],dp[i-v]+w);
z-=t;t*=2;}
if(z){long long v=x*z,w=y*z;for(int i=C;i>=v;i--) dp[i]=max(dp[i],dp[i-v]+w);}	
}
inline void completepack(long long x,long long y){for(int i=x;i<=C;i++)dp[i]=max(dp[i],dp[i-x]+y);}
int main()
{
	n=read();m=read();C=read();
	for(int i=1;i<=n;i++){
	long long x=read(),y=read(),z=read();
	if(y*z>=C) completepack(x,y);
	else zeronepack(x,y,z);
	}
	for(int i=1;i<=m;i++){
	long long x=read(),y=read(),z=read();
	for(int j=C;j>=0;j--)
	for(int k=0;k<=j;k++)
	dp[j]=max(dp[j],dp[j-k]+x*k*k+y*k+z);
	}
	printf("%lld",dp[C]);
	return 0;
}
2021/8/19 08:14
加载中...