zzbzwjx @ 2024-09-17 19:55:47
#include<bits/stdc++.h>
using namespace std;
int n,m,v[66],w[66],f[320002],c[66][6];
//c[0][0]表示主件的数量
//c[i][0]表示主件为i的物品的数量
//c[i][j]表示主件为i的第j个物品的标号
int main(){
cin>>n>>m;n/=10;
for(int i=1,q;i<=m;i++){
cin>>v[i]>>w[i]>>q;
v[i]/=10;w[i]*=v[i];
c[q][++c[q][0]]=i;
}
for(int i=1;i<=c[0][0];i++){
int c1=c[0][i],c2=c[c[0][i]][1],c3=c[c[0][i]][2];
for(int k=n;k>=v[c1];k--){
int f1=f[k-v[c1]]+w[c1],//仅主件
f2=k-v[c1]-v[c2]>=0?f[k-v[c1]-v[c2]]+w[c1]+w[c2]:0,//加附件1
f3=k-v[c1]-v[c3]>=0?f[k-v[c1]-v[c3]]+w[c1]+w[c3]:0,//加附件2
f4=k-v[c1]-v[c2]-v[c3]>=0?f[k-v[c1]-v[c2]-v[c3]]+w[c1]+w[c2]+w[c3]:0;//全要
f[k]=max(f[k],max(f1,max(f2,max(f3,f4))));
}
}
cout<<f[n]*10;
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
我的输出
18200