背包问题
来源:互联网 发布:怎么测试网络稳定性 编辑:程序博客网 时间:2024/06/03 19:53
全局最优解包含局部最优解,设定背包的容量为C,把n个宝石排列成排并编上号0,1,2,…,n-1,第i个宝石对应的体积和价值分别为V[i]和W[i], 定义d(i,j)为前i个宝石装到剩余体积为j的背包里能达到的最大价值,状态方程:d(i, j)=max{ d(i-1, j), d(i-1,j-V[i-1]) + W[i-1] }。
#include "stdafx.h"#include<cstdio>#include<iostream>using namespace std;int max(int a, int b) { return(a > b) ? a : b; }int knapSack(int W, int wt[], int val[], int n){ int i, w; int **K; K= new int*[n + 1]; for(int t=0;t<n+1;t++) { K[t] = new int[W + 1]; } for (i = 0; i <= n; i++) { for (w = 0; w <= W; w++) { if (i == 0 || w == 0) K[i][w] = 0; else if (wt[i - 1] <= w) K[i][w] = max(val[i - 1] + K[i - 1][w - wt[i - 1]], K[i - 1][w]); else K[i][w] = K[i - 1][w]; cout << K[i][w]<<" "; } cout << endl; } return K[n][W];}int main(){ int val[] = { 50,28,64,63,23 }; int wt[] = { 40,30,50,20,60 }; int W = 100; int n = sizeof(val) / sizeof(val[0]); printf("%d", knapSack(W, wt, val, n)); return 0;}
这是最基础的0/1背包问题,后续还有更多动态规划的代码可以深入研究
阅读全文
0 0
- 【无限背包】背包问题
- 背包问题---01背包
- 背包问题--部分背包
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 关于cssText的用法总结
- LINUX ACL属性设置 以及
- ubuntu16.04+python3.5安装numpy
- [笔记]ZEMAX中单透镜的设计
- Spring中集成Redis缓存
- 背包问题
- 如何实现浏览器内多个标签页之间的通信?
- java中从一个对象数组中删除元素和判断对象数组存了几个元素的方法
- volatile
- UDP通信在NAT(NAPT/内网穿透)中Session保持实现与效果测试
- 斯坦福大学公开课机器学习课程(Andrew Ng)七最优间隔分类器
- HeadFirst设计模式笔记
- 01.Web基础知识 第二章 Web开发基础知识
- API学习TreeSet