这是动态规划的分组背包
#include <bits/stdc++.h> using namespace std; const int M=1010,N=110; int n,m,f[M],a[M],b[M],c[N][N],d[N],cc,cnt; int main() { scanf("%d%d",&m,&n); for(int i=1;i<=n;i++) { scanf("%d%d%d",&a[i],&b[i],&cc); cnt=max(cnt,cc); d[cc]++; c[cc][d[cc]]=i; } for(int i=1;i<=cnt;i++) for(int j=m;j>=0;j--) for(int k=1;k<=d[i];k++) if(j>=a[c[i][k]]) f[j]=max(f[j],f[j-a[c[i][k]]]+b[c[i][k]]); printf("%d\n",f[m]); return 0; }
原文:https://www.cnblogs.com/Siv0106/p/11715727.html