10分求助
查看原帖
10分求助
241369
Steiner楼主2022/4/3 15:14
#include <iostream>
using namespace std;
long long dp[32010],v[32010],w[32010];
int maini[32010][2]={0};
bool ismain[32010];
int main()
{
	int n,m,ans=0;
	cin>>n>>m;
	for(int i=0;i<m;i++)
	{
		int q;
		cin>>v[i]>>w[i]>>q;
		w[i]*=v[i];
		if(q==0) ismain[i]=true;
		else if(maini[0]==0) maini[q][0]=i;
		else maini[q][1]=i;
	}
	for(int i=0;i<m;i++)
	if(ismain[i]) for(int j=n;j>=v[i];j--)
	{
		dp[j]=max(dp[j],dp[j-v[i]]+w[i]);
		if(j>=v[maini[i][0]]+v[maini[i][1]]+v[i]) dp[j]=max(dp[j],dp[j-v[i]-v[maini[i][0]]-v[maini[i][1]]]+w[maini[i][0]]+w[maini[i][1]]+w[i]);
		if(j>=v[maini[i][0]]+v[i]) dp[j]=max(dp[j],dp[j-v[i]-v[maini[i][0]]]+w[maini[i][0]]+w[i]);
		if(j>=v[maini[i][1]]+v[i]) dp[j]=max(dp[j],dp[j-v[i]-v[maini[i][1]]]+w[maini[i][1]]+w[i]);
	}
	cout<<dp[n];
	return 0;
 }
2022/4/3 15:14
加载中...