动态规划之0-1背包问题(C实现)
2015-11-04 15:08
676 查看
<pre name="code" class="cpp">#include<stdio.h> int c[10][100];/*对应每种情况的最大价值*/ int knapsack(int m,int n) { int i,j,w[10],p[10]; printf("请输入每个物品的重量,价值:\n"); for(i=1;i<=n;i++) scanf("%d,%d",&w[i],&p[i]); for(i=0;i<10;i++) for(j=0;j<100;j++) c[i][j]=0;/*初始化数组*/ printf("----------动态规划表-----------\n |"); for(j=0; j<=m; j++) printf("%4d", j); printf("\n----------------------------\n"); for(i=0;i<=n;i++) { printf("%3d|", i); for(j=0;j<=m;j++) { if (i==0 || j==0) { printf("%4d", c[i][j]); continue; } if(w[i]<=j) /*如果当前物品的容量小于背包容量*/ { if(p[i]+c[i-1][j-w[i]]>c[i-1][j]) /*如果本物品的价值加上背包剩下的空间能放的物品的价值*/ /*大于上一次选择的最佳方案则更新c[i][j]*/ c[i][j]=p[i]+c[i-1][j-w[i]]; else c[i][j]=c[i-1][j]; } else /*如果当前物品的容量小于背包容量,即此物品装不下!*/ c[i][j]=c[i-1][j];//i表示物品总共的个数,j表示背包的载重量 ,c[i][j]就是当前的价值 printf("%4d", c[i][j]); } printf("\n"); } printf("------------------------------\n"); return(c [m]); //n代表物品总共的个数,m表示背包的载重量,c [m]就是当前的价值 } int main() { int m,n;int i,j; printf("请输入背包的承重量,物品的总个数:\n"); scanf("%d,%d",&m,&n); printf("旅行者背包能装的最大总价值为%d",knapsack(m,n)); printf("\n"); return 0; }
运行效果图
相关文章推荐
- 调用系统相机拍照并保存在sdcard上
- Python判断IP是否属于某子网
- 如何面试Python后端工程师?
- InsertionSort -- 插入排序(C++)
- Java导出Excel合并单元格
- theano, scan关于 theano.scan函数一些简单的应用只包括fn ,sequences 和outputs_info
- shell alias
- Android Studio 快捷键
- Xcode Key Bindings & Gestures
- 马踏棋盘
- Android适配屏幕
- linux下vi操作出现E325: ATTENTION的解决方法
- 从mat文件调用公式
- About Apps
- VC获得程序自身的版本号
- ios 关于cocos2dx 3.2微信分享好友成功返回游戏卡死的情况处理
- Excel引用其它文件内容时如何用单元格内容做文件名
- python os.popen os.system
- 真正的爱情是不可以用金钱来衡量的
- Statspack安装配置及使用