Dr_MING @ 2022-11-14 21:50:43
rt,芝士代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=70;
int cmax,n,cnt;
int w[maxn][3],f1[maxn][3],f2[maxn][3],f[51419];
int red(){
int as=0;int fl=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')fl=-1;ch=getchar();}
while(isdigit(ch)){as=as*10+ch-'0';ch=getchar();}
return as*fl;
}
int main(){
cmax=red();n=red();
for(int i=1;i<=n;i++){
int x,y,z;
x=red();y=red();z=red();
if(!z){
cnt++;
w[cnt][1]=x;
w[cnt][2]=x*y;
}
if(z){
if(!f1[z][1]){
f1[z][1]=x;
f1[z][2]=x*y;
}
else{
f2[z][1]=x;
f2[z][2]=x*y;
}
}
}
for(int i=1;i<=cnt;i++){
for(int j=cmax;j>=w[i][1];j--){
f[j]=max(f[j],f[j-w[i][1]]+w[i][2]);
if(w[i][1]+f1[i][1]<=j)
f[j]=max(f[j],f[j-w[i][1]-f1[i][1]]+w[i][2]+f1[i][2]);
if(w[i][1]+f2[i][1]<=j)
f[j]=max(f[j],f[j-w[i][1]-f2[i][1]]+w[i][2]+f2[i][2]);
if(w[i][1]+f1[i][1]+f2[i][1]<=j)
f[j]=max(f[j],f[j-w[i][1]-f1[i][1]-f2[i][1]]+w[i][2]+f1[i][2]+f2[i][2]);
}
}
printf("%d",f[cmax]);
return 0;
}