#include<iostream> #include<algorithm> using namespace std; struct Item{ int w,d; //w体积,d价值 }; Item items[3500]; int f[13000]; //j个空间的能装的最大价值f[j] int main(){ int N,M; cin>>N>>M; for(int i=1;i<=N;i++){ cin>>items[i].w>>items[i].d; } for(int j=M;j>=0;j--){ if(items[1].w<=j) f[j]=items[1].d; //初始化第一个物品装填的最大价值 else f[j]=0; } for(int i=2;i<=N;i++){ for(int j=M;j>=0;j--){ if(items[i].w<j){ //有足够的空间装的下第i物品 f[j]=max(f[j],f[j-items[i].w]+items[i].d); //装与不装第i个物品之间取最优 } } } cout<<f[M]<<endl; return 0; }
原文:https://www.cnblogs.com/zzyf/p/13392452.html