完全背包问题(动态规划)
3. 完全背包问题
- 题目
- 提交记录
- 讨论
- 题解
- 视频讲解
有 NN 种物品和一个容量是 VV 的背包,每种物品都有无限件可用。
第 ii 种物品的体积是 vivi,价值是 wiwi。
求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
输出最大价值。
输入格式
第一行两个整数,N,VN,V,用空格隔开,分别表示物品种数和背包容积。
接下来有 NN 行,每行两个整数 vi,wivi,wi,用空格隔开,分别表示第 ii 种物品的体积和价值。
输出格式
输出一个整数,表示最大价值。
数据范围
0<N,V≤10000<N,V≤1000
0<vi,wi≤10000<vi,wi≤1000
输入样例
4 5
1 2
2 4
3 4
4 5
输出样例:
10
完全背包问题与01背包问题是不一样的,对于01背包,每个物品只有两个选择,不要,或者拿一个,因此对于dp[i][j](在容量为J时,拿第I个物品时的总价值)它的最大值要不是dp[i-1][j],不拿,要不就是dp[i][j-v[i]]+w[i]],拿
但是对于完全背包,并不是这么简单它可以拿很多个因此它的状态转移方程是
dp[i][j]=max(dp[i-1][j],dp[i-1][j-v[i]+w[i],dp[i-1][j-2*v[i]]+2*w[i]]......dp[i-1][j-k*v[i]]+k*w[i])只要J能够满足容量,而我们可得到另一个数组的公式
dp[i][j-v]=max(dp[i-1][j-v],dp[i-1][j-2*v]+w[i]......) 它与上述公式max判断的第二位仅仅差一个w,所以max的第二位可以转化为
dp[i][j-v]+w[i];这样就可以得到简化的状态转移方程,那么完全背包就很容易写出来来了
我写的完全背包还没有优化数组,就是二维优化为一维,但是也不是很难了,
#include<bits/stdc++.h>
using namespace std;
int w[10001],v[10001];
int dp[10010][10010];
int main()
{int n,m;cin>>n>>m;for(int i=1;i<=n;i++)cin>>v[i]>>w[i];for(int i=1;i<=n;i++){for(int j=0;j<=m;j++){dp[i][j]=dp[i-1][j];if(j>=v[i])dp[i][j]=max(dp[i][j],dp[i][j-v[i]]+w[i]);}}cout<<dp[n][m];
}
完全背包问题(动态规划)相关推荐
- 01背包问题 动态规划 java实现 简单通俗易懂
** 01背包问题 动态规划 ** 1.动态规划 什么是动态规划?动态规划就是将一个大问题不断向下拆分成小问题,直到拆分出的小问题可以求出其解,然后将小问题的解不断的向上合并,最终得到大问题的解决方案 ...
- 01背包问题动态规划(二维数组)
01背包问题动态规划(二维数组) 问题描述 一个旅行者有一个最多能装 M 公斤的背包,现在有 n 件物品,它们的重量分别是W1,W2,-,Wn,它们的价值分别为C1,C2,-,Cn,求旅行者能获得 ...
- 0-1背包问题动态规划模型的Python解法
0-1背包问题动态规划模型的Python解法 1.01背包问题 2.Python解决方案 3.01背包问题例题 1.01背包问题 背包问题(Knapsack problem)是一种组合优化的NP完全问 ...
- 0/1背包问题——动态规划、回溯、分支限界法对比
0/1背包问题--动态规划.回溯.分支限界法对比 2017.12.19 20:42:02 字数 3713 阅读 2820 目录 1.问题描述 1.1 问题描述 1.2 问题的数学表示(规划类问题,此种 ...
- 背包问题-动态规划java实现代码
背包问题-动态规划 目录 背包问题-动态规划 一.动态规划的原理 二.分析与代码实现 1.分析 2.代码分析 一.动态规划的原理 动态规划(dynamic programming)是运筹学的一个分支, ...
- 背包问题动态规划matlab,01背包问题动态规划详解
计算机算法分析考试:动态规划0-1背包问题,怎么算她说她没醉,却一直摇摇晃晃掉眼泪:你说你爱她,却从未想过给她一个家. 要考试了,老师给划重点有一题:动态规划0-1背包问题,怎么算. 怎么理问题描述: ...
- 0-1背包问题 动态规划java_C#使用动态规划解决0-1背包问题实例分析
// 利用动态规划解决0-1背包问题 using System; using System.Collections.Generic; using System.Linq; using System.T ...
- 0/1背包问题——动态规划方法
1.定义 动态规划:把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解. 2.求解步骤 (1)找到状态转化条件 (2)归纳状态转移方程 (3)定义初始条件值 3.实例解析--0/1背包 ...
- 算法设计与分析 0-1背包问题 动态规划解法【超详细】
0-1背包问题 问题描述 给定i个物品和一个容量为的背包,物品的重量是Wi,其价值为Vi 物品个数为i,背包容量为C. 如何选择装入背包内的物品,使得装入背包中的物品的总价值最大? 其中,每种物品只有 ...
- 01背包问题—动态规划求解
动态规划 01 背包问题 关键代码 for (int i = 1; i <= n; ++i){for (int j = 0; j <= c; ++j){if (j < w[i]) / ...
最新文章
- python对文件的读操作方法有哪些-python--文件的读写操作
- IOS开发基础之时钟的实现
- 这 10 个云计算错误,会让你的业务一蹶不振!
- 行!人工智能玩大了!程序员:太牛!你怎么看?
- 摄像头大数据分析跟踪均值漂移算法-spark和python
- 多线程 空值线程数_跳槽涨薪季面试题之多线程(三)
- 2022年ADB 命令知多少?一文2000字详细 ADB 命令大全来啦
- xlsx xlsx-style 设置导出的exce表格样式
- python3 numpy教程_Python Numpy 教程
- 小米android安装包下载安装,小米应用商店安装包下载
- 华为云虚拟服务器怎么搭建,云服务器怎么搭建虚拟主机
- css创始人层叠样式表,CSS层叠样式表
- javafx 教程_集成JavaFX和Swing
- PHP自学no00001第一个php程序
- 家务计算机配置,笔记本电脑佳配置是什么样的
- 故宫元宵节首开夜场,票务系统HTTPS加密护航 1
- 用C语言写羊了个羊(一)
- mysql 统计不同成绩阶段的人数
- LDO和BUCK降压稳压器对比
- vivo Z3i的usb调试模式在哪里,开启vivo Z3iusb调试模式的教程