二维费用背包问题,可以参考背包九讲。
#include<iostream> using namespace std; int main() { int m,t,n,w1[1001],w2[1001],v[1001],f[101][101]; cin>>m>>t>>n; for(int i=1;i<=n;i++) { cin>>w1[i]>>w2[i]>>v[i]; } for(int i=0;i<=m;i++) { for(int j=0;j<=n;j++) { f[i][j]=0; } } for(int x=1;x<=n;x++) { for(int i=m;i>0;i--) { if(i>=w1[x]) { for(int j=t;j>0;j--) { if(j>=w2[x]) { if(v[x]+f[i-w1[x]][j-w2[x]]>f[i][j]) { f[i][j]=v[x]+f[i-w1[x]][j-w2[x]]; } } } } } } cout<<f[m][t]<<endl; return 0; }