60pts求助
查看原帖
60pts求助
938852
CtrlEEE楼主2024/4/8 19:19

av是主件价格,aw是主件重要度

评测结果

不知道哪错了

#include <bits/stdc++.h>
using namespace std;

long long n,m;
long long av[100000],aw[700000],bv[700000][2],bw[700000][2];
long long dp[100000];
bool f[700000];

int main()
{
	cin >> n >> m;
	
	int x,y,z;
	memset(f,false,sizeof(f));
	int count = 0;
	for (int i = 1; i <= m; i++)
	{
		cin >> x >> y >> z;
		if (z == 0){ 
			count ++;
			av[count] = x;
			aw[count] = x*y;} 
		else 
		{
			if(f[z] == false){
				bv[z][0] = x;
				bw[z][0] = x*y;
				f[z] = true;
			}
			else {
				bv[z][1] = x;
				bw[z][1] = x*y;
			}
		}
	}
	
	memset(dp,0,sizeof(dp));
	
	for (int i = 1; i<=count ;i++)
	{
		for (int j = n; j >= av[i]; j--)
		{
			dp[j] = max(dp[j],dp[j-av[i]]+aw[i]);
			if (j >= av[i] + bv[i][0]) dp[j] = max(dp[j],dp[j-av[i]-bv[i][0]]+aw[i]+bw[i][0]);
			if (j >= av[i] + bv[i][1]) dp[j] = max(dp[j],dp[j-av[i]-bv[i][1]]+aw[i]+bw[i][1]);
			if (j >= av[i] + bv[i][0] + bv[i][1]) dp[j] = max(dp[j],dp[j-av[i]-bv[i][0]-bv[i][1]]+aw[i]+bw[i][0]+bw[i][1]);
		}
	}
	cout << dp[n];
	return 0; 
}
2024/4/8 19:19
加载中...