题目内容:
背包最大允许装载为C, 有n个物品要放进背包,每个物品的重量为w[1],w[2],...w[n],每个物品的价值为v[1],v[2],...v[n], 请选择物品装进背包,使得价值最大。C为整数。
输入描述
第一行为物体个数n,以及背包容量C; 第二行为n个重量(实数),空格隔开 第三行为n个价值(实数),空格隔开
输出描述
第一行为最大装载的总价值 第二行为每个物品是否装载,1表示装,0表示不装,中间用空格隔开 (测试数据能保证最优解唯一)
输入样例
5 10 2 2 6 5 4 6 3 5 4 6
输出样例
151 1 0 0 1
#include <stdio.h> int main(){ int i,j,m,n,w[100],p[100]; int c[100][100]={0},x[100]={0}; scanf("%d%d",&n,&m); for(i=0;i<n;i++) scanf("%d",&w[i]); for(i=0;i<n;i++) scanf("%d",&p[i]); for(i=1;i<=n;i++) for(j=1;j<=m;j++){ if(w[i-1]<=j){ if(c[i-1][j]<(c[i-1][j-w[i-1]]+p[i-1])) c[i][j] = c[i-1][j-w[i-1]]+p[i-1]; else c[i][j] = c[i-1][j]; } else c[i][j] = c[i-1][j]; } printf("%d\n",c[n][m]); for(i=n;i>0;i--) if(c[i][m]>c[i-1][m]){ x[i-1]=1; m-=w[i-1]; } for(j=0;j<n;j++) printf("%d ",x[j]); return 0; }