60分
#include<bits/stdc++.h>
using namespace std;
int m,n;
long long a[100],b[100],h;
long long aa[5][100],bb[5][100];
long long dp[100000];
int main(){
cin>>m>>n;
for(int i=1;i<=n;i++){
int x,y,z;
cin>>x>>y>>z;
if(z==0){
h++;
a[h]=x;
b[h]=x*y;
}else{
aa[0][z]++;
aa[aa[0][z]][z]=x;
bb[aa[0][z]][z]=x*y;
}
}
for(int i=1;i<=h;i++){
for(int j=m;j>=a[i];j--){
dp[j]=max(dp[j],dp[j-a[i]]+b[i]);
if(j>=a[i]+aa[1][i]){
dp[j]=max(dp[j],dp[j-a[i]-aa[1][i]]+b[i]+bb[1][i]);
}
if(j>=a[i]+aa[2][i]){
dp[j]=max(dp[j],dp[j-a[i]-aa[2][i]]+b[i]+bb[2][i]);
}
if(j>=a[i]+aa[1][i]+aa[2][i]){
dp[j]=max(dp[j],dp[j-a[i]-aa[1][i]-aa[2][i]]+b[i]+bb[1][i]+bb[2][i]);
}
}
}
cout<<dp[m];
return 0;
}
100分
#include<bits/stdc++.h>
using namespace std;
int m,n;
int a[100000],b[100000];
int aa[5][100000],bb[5][100000];
int dp[100000];
int main(){
cin>>m>>n;
for(int i=1;i<=n;i++){
int x,y,z;
cin>>x>>y>>z;
if(z==0){
a[i]=x;
b[i]=x*y;
}else{
aa[0][z]++;
aa[aa[0][z]][z]=x;
bb[aa[0][z]][z]=x*y;
}
}
for(int i=1;i<=n;i++){
if(a[i]!=0){
for(int j=m;j>=a[i];j--){
dp[j]=max(dp[j],dp[j-a[i]]+b[i]);
if(j>=a[i]+aa[1][i]){
dp[j]=max(dp[j],dp[j-a[i]-aa[1][i]]+b[i]+bb[1][i]);
}
if(j>=a[i]+aa[2][i]){
dp[j]=max(dp[j],dp[j-a[i]-aa[2][i]]+b[i]+bb[2][i]);
}
if(j>=a[i]+aa[1][i]+aa[2][i]){
dp[j]=max(dp[j],dp[j-a[i]-aa[1][i]-aa[2][i]]+b[i]+bb[1][i]+bb[2][i]);
}
}
}
}
cout<<dp[m];
return 0;
}
只是对主件的存储方式稍作改动就AC了,不知道为什么。