(p244)01背包问题
2016-03-27 14:24
253 查看
#include<stdio.h> #define maxn 100 #define maxw 1000 int w[maxn+1]={0,10,20,30},v[maxn+1]={0,60,100,120},d[maxn+1][maxw+2],n=3,W=50,ans;//现在才知道大数组要声明为全局变量才不会报错 int select(int w[],int v[],int n,int W) { int i,j,f[maxn+1][maxn+1];//f[i][j]表示可用空间为j时在前i个物品中选取所能取得的最大值 for (i=0;i<=n;i++) for (j=0;j<=W;j++) { f[i][j]=0; d[i][j]=0;//d[i][j]表示f[i][j]对应的最后一个物品,用来记录物品,也就是继承关系 } for (i=1;i<=n;i++) for (j=0;j<=W;j++) { f[i][j]=f[i-1][j]; d[i][j]=d[i-1][j]; if ((w[i]<=j)&&(f[i-1][j-w[i]]+v[i]>f[i][j])) { f[i][j]=f[i-1][j-w[i]]+v[i]; d[i][j]=i; } } return f [W]; } int print(int d[][maxw+2],int i,int j) { while (i>=1) { if (i==d[i][j]) { printf("%d ",i); j-=w[i]; i=d[i-1][j]; } else i=d[i-1][j]; } printf("\n"); return 0; } int main(void) { ans=select(w,v,n,W); printf("%d\n",ans); print(d,n,W); return 0; }
相关文章推荐
- P1002 谁拿了最多奖学金
- Java开发微信公众号-接口测试帐号接口配置及Java源代码
- ASP.NET中JQuery+AJAX调用后台
- Chapter1-数字图像处理概述
- HDU 5654 xiaoxin and his watermelon candy 归并树
- 阿里2016实习offer五面经验与总结
- PHP网络编程
- HDU ACM 1392 Surround the Trees->凸包
- SQL Server 2012 实现分页新语法
- R语言的一些矩阵运算
- P1174 互素
- 2016sdau课程练习专题一 1008 problemI
- Android AutoLayout全新的适配方式 堪称适配终结者
- BestCoder Round #77 (div.2)
- EasyUI表单验证
- 免费开源!仿微信仿陌陌类APP源代码整项目开源,包括ADT项..
- 2016/3/27 - 记
- SQl优化问题4
- 实验五分析system_call中断处理过程
- P1001 第K极值