c20191623 @ 2019-02-18 15:55:07
#include<bits/stdc++.h>
using namespace std;
int n,v,tc[70],tw[70],tp[70],w[70][3],c[70][3],f[32010],num[70];
bool zj[70];
inline void read(int &res){
char ch;bool flag=false;
while(!isdigit(ch=getchar())) (ch=='-')&&(flag=true);
for(res=ch-48;isdigit(ch=getchar());res=res*10+ch-48);
(flag)&&(res=-res);
}
int main(){
read(v),read(n);
for(int i=1;i<=n;i++){
read(tw[i]),read(tc[i]),read(tp[i]);
}
for(int i=1;i<=n;i++){
if(!tp[i]){
zj[i]=true;
w[i][0]=tw[i];
c[i][0]=tc[i]*tw[i];
}
else{
num[tp[i]]++;
if(!w[tp[i]][1]) w[tp[i]][1]=tw[i],c[tp[i]][1]=tc[i]*tw[i];
else w[tp[i]][2]=tw[i],c[tp[i]][2]=tc[i]*tw[i];
}
}
for(int i=1;i<=n;i++){
if(!zj[i]) continue;
if(num[i]==0) for(int j=v;j>=w[i][0];j--) f[j]=max(f[j],f[j-w[i][0]]+c[i][0]);
if(num[i]==1) for(int j=v;j>=w[i][0]+w[i][1];j--) f[j]=max(max(f[j],f[j-w[i][0]-w[i][1]]+c[i][0]+c[i][1]),f[j-w[i][0]]+c[i][0]);
if(num[i]==2) for(int j=v;j>=w[i][0]+w[i][1]+w[i][2];j--) f[j]=max(max(f[j],f[j-w[i][0]-w[i][1]]+c[i][0]+c[i][1]),max(f[j-w[i][0]]+c[i][0],f[j-w[i][0]-w[i][1]-w[i][2]]+c[i][0]+c[i][1]+c[i][2]));
}
printf("%d",f[v]);
return 0;
}
by 吃的 @ 2019-03-17 14:27:08
我是90分的 第六个点WA