动态规划之背包问题
来源:互联网 发布:短信猫 java usb 编辑:程序博客网 时间:2024/06/06 00:12
动态规划之背包问题
问题:给定
分析: 可以把问题的求解过程看成是一系列的决策过程,在第
具体实现过程如下:
/*********************************************IDE:Dev c++5.11Data:2016.10.15Author:Robert.Tianyi**********************************************/#include<stdio.h>#include<stdlib.h>struct goods{ int price; int w;};int max(int a,int b){ return a>b?a:b;}int Knapsack_DP(struct goods Goods[],int n){ int max_w=15; int (*opt)[max_w+1]; int i,w,wi; opt=(int (*)[max_w+1])malloc(sizeof(int)*(n+1)*(max_w+1)); for(i=0;i<=n;i++) for(w=0;w<=max_w;w++) opt[i][w]=0; for(i=1;i<=n;i++){ for(w=1;w<=max_w;w++){ opt[i][w]=opt[i-1][w]; if(w-Goods[i].w>=0){ opt[i][w]=max( opt[i-1][w],opt[i-1][w-Goods[i].w]+Goods[i].price ); } } } printf("最大重量:w "); for(w=0;w<=max_w;w++) printf("%4d",w); printf("\n"); for(i=0;i<=n;i++){ printf("前%d件物品:",i); for(w=0;w<=15;w++){ printf("%4d",opt[i][w]); } printf("\n"); } return opt[n][15]; }void main(){ int value; struct goods Goods[6]; Goods[0].price=0;Goods[0].w=0; Goods[1].price=10;Goods[1].w=9; Goods[2].price=7;Goods[2].w=12; Goods[3].price=1;Goods[3].w=2; Goods[4].price=3;Goods[4].w=7; Goods[5].price=2;Goods[5].w=5; value=Knapsack_DP(Goods,5); printf("max_price=%d",value);}
运行结果如下:
总结:本问题有
0 0
- 动态规划之背包问题
- 动态规划之背包问题
- 动态规划之背包问题
- 动态规划之背包问题
- 动态规划之背包问题
- 动态规划之背包问题
- 动态规划之背包问题
- 动态规划之背包问题
- 动态规划之背包问题
- 动态规划之背包问题
- 动态规划之背包问题
- 动态规划之背包问题
- 动态规划之背包问题
- 动态规划之背包问题
- 动态规划之背包问题
- 动态规划之背包问题
- 动态规划之背包问题
- 动态规划之背包问题
- 商业级开发框架(MVP+RxJava+Retrofit+GreenDAO)详解
- JavaScript表单编程
- HTTP错误代码描述
- 第十章:Approximate Inference exercise 1-10
- Codefroces 429 B. Working out
- 动态规划之背包问题
- 微机原理--第三章(6)移位指令
- 第十章:Approximate Inference exercise 11-17
- malloc与new的区别
- PHP面向对象_模拟一般面向对象语言中的方法重载(overload)
- linux常用终止信号的区别
- linux fork()
- URLClassLoader使用方法和实例 类加载器
- LOB