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;
}