0-1背包问题动态规划代码实现(C++实现)
来源:互联网 发布:淘宝客服管理方案 编辑:程序博客网 时间:2024/06/10 09:42
01背包问题,是用来介绍动态规划算法最经典的例子,网上关于01背包问题的讲解也很多,我写这篇文章力争做到用最简单的方式,最少的公式把01背包问题讲解透彻。
01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ), f[i-1,j] }
f[i,j]表示在前i件物品中选择若干件放在承重为 j 的背包中,可以取得的最大价值。
Pi表示第i件物品的价值。
决策:为了背包中物品总价值最大化,第 i件物品应该放入背包中吗 ?
#include <iostream>#include <algorithm>using namespace std;int Solution(int W[],int V[],int n,int Maxsize)//w[]表示n物品重量,V[]代表n个物品的价值{ int dp[100][100] ; for (int i = 0; i <= Maxsize; i++) dp[0][i] = 0; for (int i = 1; i <= n; i++) for (int j = Maxsize; j >= 0; j--) { if(j>=W[i])//判断是否第i个物体是否重量满足可以放入的条件 dp[i][j]=max(dp[i][j],dp[i-1][j-W[i]]+V[i]);//状态转换方程 dp[i][j]=max(dp[i][j],dp[i-1][j-V[i]]) else dp[i][j]=dp[i-1][j]; } cout<<dp[n][Maxsize]; return 0;}int main() { int Maxsize,n; int W[100]={0}; int V[100]={0}; cin>>Maxsize>>n; for(int i=1;i<=n;i++) { cin>>W[i]>>V[i]; } Solution(W,V,n,Maxsize); return 0;}
1 0
- 0-1背包问题(动态规划C语言实现)
- 动态规划之0-1背包问题(C实现)
- 0-1背包问题动态规划代码实现(C++实现)
- 0/1背包问题----动态规划实现
- 动态规划算法0-1背包问题java实现
- 算法java实现--动态规划--0-1背包问题
- 动态规划之0/1背包问题-java实现
- 动态规划-背包问题九讲及其代码实现
- 01背包问题 动态规划 c语言实现
- c++实现0-1背包问题完整源码(动态规划实现)
- c++实现0-1背包问题完整源码续(动态规划+回溯法实现)
- c++实现0-1背包问题完整源码(动态规划实现)
- 0-1背包问题与完全背包问题C++实现 动态规划
- 0-1背包问题与完全背包问题C++实现 动态规划
- 动态规划实现 01背包问题
- 动态规划_01背包问题_Java实现
- 动态规划--01背包问题 C++实现
- 背包问题 动态规划 滚动数组实现
- ireport+jsp基于jasperReport 实现(后台map数据源)导出报表至web页面 二
- Hibernate 学习笔记
- altium designer网络标号和总线设计
- MySQL --- MySQL的定时器和存储过程
- 关于Guitar Pro声部的使用技巧【二】
- 0-1背包问题动态规划代码实现(C++实现)
- CMakeLists.txt
- MyBatis动态排序问题
- js页面处理时间-页面如何显示时间
- 文章标题
- 链表倒数第n个节点
- ASP.NET MVC 第一次访问每一个控制器特别慢.
- poj1486 (二分图匹配)
- C#实现字符的全角,半角转换