某Dong @ 2018-01-03 10:44:46
#include <bits/stdc++.h>
using namespace std;
int main (){
int n,m,p,q,s;
int num[100]={0};
int c[100][3]={},w[100][3]={},f[10005]={};
cin>>m>>n;
for(int i=1;i<=n;i++){
cin>>s>>p>>q;
if(!q){
c[i][0]=s;
w[i][0]=s*p;
}
else{
num[q]++;
c[q][num[q]]=c[q][0]+s;
w[q][num[q]]=w[q][0]+s*p;
}
}
for(int i=1;i<=n;i++)
for(int v=m;v>=c[i][0]&&c[i][0]!=0;v-=10){
f[v]=max(f[v],f[v-c[i][0]]+w[i][0]);
if(v>=c[i][1])
f[v]=max(f[v],f[v-c[i][1]]+w[i][1]);
if(v>=c[i][2])
f[v]=max(f[v],f[v-c[i][2]]+w[i][2]);
if((v+c[i][0])>=(c[i][1]+c[i][2]))
f[v]=max(f[v],f[v+c[i][0]-c[i][1]-c[i][2]]+w[i][1]+w[i][2]-w[i][0]);
}
cout<<f[m];
}
by _小妖 @ 2018-02-02 11:29:34
我一开始写的时候也是20分,这题把主附件打包之后是需要分组的,因为不分组可能会把主件1+附件1,主件1+附件2,主件1+附件1+附件2都选了,显然是错的