0-1背包问题
来源:互联网 发布:日语翻译哪个软件好 编辑:程序博客网 时间:2024/06/12 23:37
//递归#include<stdio.h>#define n 5int w[n] = {2,2,6,5,4};//表示每个物品的重量 int v[n] = {6,3,5,4,6};//每个物品的价值 int m(int i,int j){int a,b;if(i == n - 1){if(j >= w[i])return v[i];elsereturn 0;}if(j < w[i])return m(i + 1,j);a = m(i + 1,j - w[i]) + v[i];b = m(i + 1,j);return a > b ? a : b;}int main(){int c = 10;printf("%d.",m(0,c));return 0; }==========================================================//备忘录#include<stdio.h>#define n 5#define c 10int w[n] = {2,2,6,5,4};//表示每个物品的重量 int v[n] = {6,3,5,4,6};//每个物品的价值int s[n][c + 1];int m(int i,int j){int a,b;int result;if(s[i][j] >= 0)return s[i][j];if(i == n - 1){if(j < w[i])result = 0;elseresult = v[i];}else if(j < w[i]){result = m(i + 1,j);}else{a = m(i + 1,j);b = m(i + 1,j - w[i]) + v[i];result = a > b ? a : b;} s[i][j] = result;return result;}int main(){int i,j;for(i = 0;i < n;i ++)for(j = 0;j <= c;j ++)s[i][j] = -1;printf("%d\n",m(0,c));j = c;for(i = 0;i < n - 1;i ++)//先输出前n-1个物品中哪个放入了包中 {if(s[i][j] != s[i + 1][j]){printf("%d\t",i);j = j - w[i];}}if(j >= w[n - 1])//判断最后一个物品是否放入了包里 printf("%d\n",n - 1);return 0;}==========================================================================================// 动态规划#include<stdio.h>#define n 5#define c 10int main(){int i,j;int w[n] = {2,2,6,5,4};//表示每个物品的重量 int v[n] = {6,3,5,4,6};//每个物品的价值int s[n][c + 1];for(i = 0;i < n;i ++)for(j = 0;j <= c;j ++)s[i][j] = -1;for(j = 0;j <= c;j ++){if(j < w[n - 1])s[n - 1][j] = 0;else{s[n - 1][j] = v[n - 1];}}for(i = n - 2;i >= 0;i --){for(j = 0;j <= c;j ++){if(j < w[i])s[i][j] = s[i + 1][j];else{int a = s[i + 1][j - w[i]] + v[i];int b = s[i + 1][j];s[i][j] = a > b ? a : b;}} }for(i = 0;i < n;i ++){for(j = 0;j <= c;j ++)printf("%3d",s[i][j]);putchar('\n');}printf("%d\n",s[0][c]);j = c;for(i = 0;i < n - 1;i ++)//先输出前n-1个物品中哪个放入了包中 {if(s[i][j] != s[i + 1][j]){printf("%d\t",i);j = j - w[i];}}if(j >= w[n - 1])//判断最后一个物品是否放入了包里 printf("%d\n",n - 1);return 0;}
0 0
- 背包问题(0-1背包、完全背包、多重背包)详解
- 背包问题和0-1背包问题
- 背包问题和0-1背包问题
- 背包问题系列--"0-1背包问题"
- 背包笔记-含0/1背包问题、完全背包问题、多重背包问题、二维背包问题、分组背包问题
- 【背包问题】背包问题之0-1背包、完全背包、多重背包
- 0-1背包问题
- 0/1背包问题
- 0,1背包问题
- 0-1背包问题
- 0/1背包问题
- 0-1背包问题
- // 0-1背包问题
- 0/1背包问题
- 0-1背包问题
- 0-1背包问题
- 0-1背包问题
- 0/1背包问题
- 算法训练 进制转换
- 梳理深度学习论文(一)
- 面试算法:用队列计算滑动窗口内的最大网络流量
- priority_queue(优先队列)的用法
- TCP/IP协议三次握手与四次握手流程解析
- 0-1背包问题
- 异常The last packet sent successfully to the server was 0 milliseconds ago...
- 如何进行数据分析(以kaggle新手赛为例)-1:
- 日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
- 电路布线问题
- sizeof 与 strlen 的区别
- 精简rcS文件分析
- # docker 初探01-安装MySQL和wordpress
- 异常:NoClassDefFoundError或Could not initialize class