二維揹包+列出物品選擇
阿新 • • 發佈:2018-12-19
#include<cstdio> #include<algorithm> using namespace std; int n,a[1001],f[1001][10001],s,v[1001],Max; void print(int sum,int x){ if(x==0||sum==0) return; if(f[sum-1][x]==f[sum][x]) print(sum-1,x); else{ print(sum-1,x-a[sum]); printf("\n%d %d %d",sum,a[sum],v[sum]); } } int main(){ scanf("%d%d",&n,&s); for(int i=1;i<=n;i++) scanf("%d%d",&a[i],&v[i]); for(int i=1;i<=n;i++) for(int j=s;j>=0;j--) if(j<a[i]) f[i][j]=f[i-1][j]; else f[i][j]=max(f[i-1][j],f[i-1][j-a[i]]+v[i]); printf("%d",f[n][s]); print(n,s); }