好像题解大多写的是3层循环,刚刚写了个两层循环的,大佬们康康有漏洞没。
#include<stdio.h>
#include<math.h>
#include<iostream>
using namespace std;
int weight[1005],value[1005],vis[1005],dp[100005],choose[100005][1005];
int main(){
int m,n;
scanf("%d%d",&m,&n);
for(int i=1;i<=n;i++){
scanf("%d%d%d",&weight[i],&value[i],&vis[i]);
}
for(int i=1;i<=n;i++){
for(int j=m;j>=weight[i];j--){
if (j>=weight[i]&&dp[j-weight[i]]+value[i]-value[choose[j][vis[i]]]>dp[j]){
dp[j]=dp[j-weight[i]]+value[i]-value[choose[j][vis[i]]];
choose[j][vis[i]]=i;
}
}
}
printf("%d",dp[m]);
return 0;
}