如题,题解里面没有和我一样的二维DP,求助
#include<iostream>
using namespace std;
struct sitem{
int val,vol;
};
struct item{
int val,vol;
bool has1=0,has2=0;
sitem i1,i2;
}a[65];
int dp[65][32005];
int main(){
int n,m;
cin>>n>>m;
int item_n=1;
for(int i=0;i<m;i++){
int t1,t2,t3;
cin>>t1>>t2>>t3;
if(t3==0){
a[item_n].val=t1*t2;
a[item_n].vol=t1;
item_n++;
}else{
if(!a[t3].has1){
a[t3].i1.val=t1*t2;
a[t3].i1.vol=t1;
a[t3].has1=1;
}else{
a[t3].i2.val=t1*t2;
a[t3].i2.vol=t1;
a[t3].has2=1;
}
}
}
for(int i=1;i<=item_n;i++){
for(int j=0;j<=n;j++){
if(j>=a[i].vol){
dp[i][j]=max(dp[i-1][j],dp[i-1][j-a[i].vol]+a[i].val);
if(a[i].has1&&a[i].i1.vol+a[i].vol<=j){
dp[i][j]=max(dp[i][j],dp[i-1][j-a[i].vol-a[i].i1.vol]+a[i].val+a[i].i1.val);
}
if(a[i].has2&&a[i].i2.vol+a[i].vol<=j){
dp[i][j]=max(dp[i][j],dp[i-1][j-a[i].vol-a[i].i2.vol]+a[i].val+a[i].i2.val);
}
if(a[i].has1&&a[i].has2&&a[i].i1.vol+a[i].i2.vol+a[i].vol<=j){
dp[i][j]=max(dp[i][j],dp[i-1][j-a[i].vol-a[i].i1.vol-a[i].i2.vol]+a[i].val+a[i].i1.val+a[i].i2.val);
}
}else{
dp[i][j]=dp[i-1][j];
}
}
}
cout<<dp[item_n][n];
}