本地能过 求调
查看原帖
本地能过 求调
1019983
Czero_2023楼主2024/10/10 21:37

rt,第三个点下载下来是对的

#include <iostream>
using namespace std;

int n,m;
int dp[32001],w[61],v[61],item[61][3];
bool flag[61];

int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		int a,b,c;cin>>a>>b>>c;
		b*=a;v[i]=a;w[i]=b;
		if(c==0)flag[i]=1;
		else{
			item[c][0]++;
			item[c][item[c][0]]=i;
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(flag[i]==0)continue;
		for(int j=n;j>=0;j--)
		{
			int a=item[i][1],b=item[i][2],c=item[i][0];
			if(j>=v[i])dp[j]=max(dp[j],dp[j-v[i]]+w[i]);
			if(c>=1&&j>=v[i]+v[a])dp[j]=max(dp[j],dp[j-v[i]-v[a]]+w[i]+w[a]);
			if(c>=2&&j>=v[i]+v[b])dp[j]=max(dp[j],dp[j-v[i]-v[b]]+w[i]+w[b]);
			if(c>=2&&j>=v[i]+v[a]+v[b])dp[j]=max(dp[j],dp[j-v[i]-v[a]-v[b]]+w[i]+w[a]+w[b]);
		}
	}
	cout<<dp[n];
	return 0;
}

第三个点:

4500 12
100 3 0
400 5 0
300 5 0
1400 2 0
500 2 0
800 2 4
1400 5 4
300 5 0
1400 3 8
500 2 0
1800 4 0
440 5 10

答案:16700

求助%%%

2024/10/10 21:37
加载中...