dalao帮忙,Re6个点,T4个点
查看原帖
dalao帮忙,Re6个点,T4个点
233779
Dune_楼主2020/7/22 10:55
#include<stdio.h>
#include<algorithm>
using namespace std;
int n,m,V;
int v[10000010],val[10000010],num[10000010];
int a[10000010],b[10000010],c[10000010];
int volume[100000010],value[100000010],sum = 0,cnt = 0;
int res[1000010],res2[1000010];
int main()
{
	scanf("%d%d%d\n",&n,&m,&V);
	for(int i = 1;i <= n;++i)
	{
		scanf("%d %d %d\n",&v[i],&val[i],&num[i]);
	}
	for(int i = i;i <= m;++i)
	{
		scanf("%d %d %d\n",&a[i],&b[i],&c[i]);
	}
	for(int i = 1;i <= n;++i)
	{
		int temp = 1;
		while(temp < num[i])
		{
			volume[++cnt] = temp*v[i];
			value[cnt] = temp*val[i];
			sum += temp*val[i];
			num[i] -= temp;
			temp <<= 1;
		}
		if(num[i] != 0)
		{
			volume[++cnt] = num[i]*v[i];
			value[cnt] = num[i]*val[i];
			sum += num[i]*val[i];
		}
	}
	res[0] = 1;
	for(int i = 1;i <= cnt;++i)
	{
		for(int j = sum;j >= value[i];--j)
		{
			res[j] = max(res[j],res[j-value[i]] + volume[i]); 
		}
	}
	for(int i = 1;i <= n;++i)
	{
		for(int j = V;j >= 0;--j)
		{
			for(int k = 0;k <= j;++k)
			{
				res2[j] = max(res2[j],res2[j-k]+(k*(a[i]*k+b[i])+c[i]));
			}
		}
	}
	printf("%d",res[n]+res2[m]);
	return 0;
} 

有木有dalao来帮忙,6个Re,4个T,求助

2020/7/22 10:55
加载中...