60 求助
查看原帖
60 求助
1408275
tc_adventurking楼主2024/9/9 20:09
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,m;
	cin>>n>>m;
	vector<int> vv(m+1),v(m+1);
	vector<int> dp(n+1);
	vector<vector<int>> bagvv(m+1),bagv(m+1);
	int o=1;
	for(int i=0;i<m;i++)
	{
		int p,y,k0;
		cin>>y>>p>>k0;
		if(k0!=0)
		{
			bagv[k0].push_back(y);
			bagvv[k0].push_back(y*p);
		}
		else
		{
			v[o]=y;
			vv[o]=y*p;
			o++;
		}
	}
	for(int i=1;i<o;i++)
	{
				if(bagvv[i].size()==1)
				{
					int av=vv[i]+bagvv[i][0],an=v[i]+bagv[i][0];
					for(int j=n;j>=v[i];j-=10)
					{
						if(j>=an)
						dp[j]=max(dp[j],dp[j-an]+av);
						if(j>=v[i])
						dp[j]=max(dp[j],dp[j-v[i]]+vv[i]);
					}
				}
				else if(bagvv[i].size()==2)
				{
					int av0=vv[i]+bagvv[i][0],an0=v[i]+bagv[i][0];
					int av1=vv[i]+bagvv[i][1],an1=v[i]+bagv[i][1];
					int av01=vv[i]+bagvv[i][0]+bagvv[i][1],an01=v[i]+bagv[i][0]+bagv[i][1];
					for(int j=n;j>=v[i];j-=10)
					{
						if(j>=v[i])
						dp[j]=max(dp[j],dp[j-v[i]]+vv[i]);
						if(j>=an0)
						dp[j]=max(dp[j],dp[j-an0]+av0);
						if(j>=an1)
						dp[j]=max(dp[j],dp[j-an1]+av1);
						if(j>=an01)
						dp[j]=max(dp[j],dp[j-an01]+av01);
					}
				}
				else
				{
				for(int j=n;j>=v[i];j-=10)
				dp[j]=max(dp[j],dp[j-v[i]]+vv[i]);
				}
	}
	cout<<dp[n];
}
2024/9/9 20:09
加载中...