80分 两个WA 求大佬帮忙看一下
查看原帖
80分 两个WA 求大佬帮忙看一下
355521
rainbow_star楼主2021/7/23 16:13
#include<iostream>
#include<cstdio>
using namespace std;
long long n,m,C;
long long v1,w1,d1,y;
long long v2,w2; 
long long a,b,c,z;
long long dp[10001];
int main()
{
	scanf("%lld%lld%lld",&n,&m,&C);
	long long i,j,k,l;
	for(i=1;i<=n;i++)
	{
		scanf("%lld%lld%lld",&v1,&w1,&d1);
		if(d1>=C/v1) 
		{
			for(j=v1;j<=C;j++)
				dp[j]=max(dp[j],dp[j-v1]+w1);
		}
		else
		{
			k=1;
			while(d1>k)
			{
				d1-=k;
				v2=v1*k;
				w2=w1*k;
				k*=2;
				for(j=C;j>=v2;j--)
					dp[j]=max(dp[j],dp[j-v2]+w2);
			}
			if(d1>0)
			{
				v2=d1*v1;
				w2=d1*w1;
				for(j=C;j>=v2;j--)
					dp[j]=max(dp[j],dp[j-v2]+w2);
			}
		}
	}	
	for(i=1;i<=m;i++)
	{
		scanf("%lld%lld%lld",&a,&b,&c);
		z=-(b/(2*a));
		for(j=C;j>=0;j--)
			for(l=1;l<=j;l++)
			{
				if(a<0&&z>0&&l>z+1)
					break;
				if(a>0&&z>0&&l>z&&l<2*z)
					l=2*z; 
				y=a*l*l+b*l+c;
				dp[j]=max(dp[j],dp[j-l]+y);
			}
	}
	printf("%lld",dp[C]);
	return 0;
}
2021/7/23 16:13
加载中...