DP-01背包问题

DP(动态规划)解决01背包问题 背包问题 背包问题是一类经典的动态规划问题(DP问题),非常灵活、变体多样,然我想最基础的背包问题透彻理解之后,变体问题自然迎刃而解。下面介绍两类最简单的背包问题:01背包问题和完全背包问题,而两类问题之中,又以01背包问题为重。 01背包问题 我们先来看看01背包问题的题目吧: 有n件物品,每件物品的重量为w[i],价值为c[i]。现有一个容量为V的背包,问如何选取物品放入背包,使得背包内物品的... 阅读详情

问题:
有n件物品,每件物品的重量为w[i],价值为c[i],现有一个容量为v的背包,问如何选取物品放入背包,使得背包内物品的总价值最大,其中每件物品都只有1件。
样例:
5 8 // n = 5, v = 8
3 5 1 2 2
4 5 2 1 3

思路:
dp[i][j]用来表示前i件物品,在容量为j的背包中的最大价值
状态转移方程:dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w[i]] + c[i]);

Code:

//01背包问题 
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
const int maxn = 1010;
int v,n;
int w[maxn], c[maxn];
int dp[maxn][maxn];


void DP(){

    memset(dp, 0, sizeof(dp));

    for(int i = 1; i <= n; ++i){
        for(int j = w[i]; j <= v; ++j){
            dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w[i]] + c[i]);
        }
    }
}

int main() {
//  fstream cin("a.txt");
    cin >> n >> v;
    for(int i = 0; i < n; ++i){
        cin >> w[i];
    }
    for(int i = 0; i < n; ++i){
        cin >> c[i];
    }

    DP();

    cout << dp[n][v] <<endl;                                                                
    return 0;
}
DP背包问题模板:01背包 与 完全背包 01背包问题: 有n件物品,每件物品的重量为w[i],价值为c[i]。现有一个容量为V的背包,问如何选取物品放入背包,使得背包内物品的总价值最大。其中每种物品只有1件。 dp[i][j]:前 i 件物品装入容量为 j 的背包中得到的最大价值 对第 i 件物品,有2种前状态: a. 选择第 i 件物品,则 dp[i][j] = dp[i-1][ j-w[i] ] + c[i] b. 不选择第 ... 阅读详情

相关推荐

DAY45:动态规划(五)背包问题:01背包理论基础+二维DP解决01背包问题

对于每一种物品(纵轴上的索引i),对于每一个背包大小(横轴上的索引j),都计算出当前背包大小能存放物品的最大价值。如果当前背包的容量无法装下物品i,那么dp[i][j]的值就等于dp[i-1][j],否则,需要在“不放入物品i”和“放入物品i”这两种选择中选取价值最大的,即。这样,遍历到指定背包大小的时候,得到的就是当前背包可以装下物品的最大价值。所以说,这个DP递推公式对于每一个背包数值都适用。我们需要时刻注意,遍历到每一个物品的时候,dp[i][j]

CFY1226的博客 604

背包问题

一 01背包问题 问题描述:        有n件物品,每件物品的重量为w[i], 价值为c[i],现有一个容量为V的背包,问如选取物品放入背包,使得背包内物品的总价值最大。其中每种物品都只有一件。 dp[i][v]表示前i件物品(1 考虑对第i件物品的选择策略,有两种策略: (1)  不放第 i 件物品,那么问题转化为前 i-1 件物品恰好装入 容量为 v的背包所能获得

Grady_Ne的博客 468

Dp线性01背包问题

题目描述:有个背包可承受重量N,现有T件物品,每件物品重量为Wi,价值为Vi ,每件物品只有一个,这个背包可以装载物品的最大价值是多少?输入格式第一行,两个整数,分别表示N和T,用空格隔开(N≤1000,T≤100)接下来T行,每行两个整数,分别表示T件物品的重量Wi和价值Vi(1≤Wi,Vi≤100)输出格式一行,表示这个背包可以装载物品的最大价值输入输出样列输入样例1: 100 5 77 92 22 22 29 87 50 46 99 90 输出样例1: 133 【耗时限制】1000ms 【内存限制

QHDXmax的博客 454

动态规划——背包问题

背包问题在以前的时候自己也听过,今天做一下基本的总结; 背包问题目前接触的有两种——01背包问题和完全背包问题; 一、01背包问题: 题目描述如下:有n件物品,每件物品的重量为w[i],价值为c[i],现有一个容量为V的背包,问如何选取物品入背包,使得背包中的物品总价值最大,其中每一个物品都只有一件。 样例: n=5 v=8 3 5 1 2 2 ——w[i] 4 5 2 1 3 ——...

InNoVaion_yu的博客 448

自己用C++写的背包问题的DP算法

用C++实现的背包问题的DP算法

告别“为了写而写”:GJB438C-2021新规下,软件文档如何真正为项目服务?

本文深入解析GJB438C-2021新规如何重构软件文档的实战价值,通过文档体系瘦身、流程再造和敏捷化实践,显著提升军工软件项目的效率。新标准删除30%冗余文档,引入动态编制法和轻量化模板,使文档编制工作量降低37%,关键路径周期缩短15%。

weixin_30765577的博客 448

DP-完全背包问题

题目: 有n件物品,每件物品的重量为w[i],价值为c[i],现有一个容量为v的背包,问如何选取物品放入背包,使得背包内物品的总价值最大,其中每件物品都有无穷件。 思路: dp[i][j]用来表示前I件物品,背包容量为j的物品最大价值 状态转移方程:dp[i][j] = max(dp[i - 1][j], dp[i][j - w[i]] + c[i]) Code: //完全背包问题 ...

不行不至 400

STM32 超声波模块输入捕获测距(标准库)

通道2设置为下降沿触发,触发瞬间会将CNT的记录到CCR2中,由于上升沿触发时已经将CNT置零所以此时的CNT的值就是高电平的持续时间。通道1设置为上升沿触发,触发的瞬间会将CNT的值记录到CCR1里面,同时设置通道1触发带有从模式,并把从模式设置为置零CNT。超声波传感器模块上面通常有两个超声波元器件,一个用于发射,一个用于接收。电路板上有四个引脚:VCC、GND、Trig(触发)、Echo(回应)。输入捕获原理可以看看这位大佬,感觉写的很清楚,工作电压与电流:5V,15mA。感测角度:不小于15度。

qq_62425900的博客 2082

算法笔记 11.7 背包问题

01背包问题: 有n件物品,每件物品的重量为w[i],价值为c[i]。现在有一个容量为V的背包,问如何选取物品放入背包,使得背包内 物品的总价值最大。其中每种物品都只有1件。 样例: 5 8 //n=5 V=8 5件物品 8大的包 3 5 1 2 2 //w[i] 每件物品的重量 w[i]之和有上限 4 5 2 1 3 //c[i] 每件物品的价值 要求价值之和尽可能大 求最...

树叶子的博客 542

TGAT Python:图神经网络中的动态图算法

其中,图神经网络中的动态图算法成为了研究的热点之一。在模型的 forward 方法中,通过循环调用 TGATLayer 实例来进行图神经网络的前向传播。最终,模型返回图中节点的表示向量 output,可以用于图分类等任务。TGAT 算法的核心思想是在节点之间建立注意力连接,以捕捉节点在不同时间步之间的关系。TGAT 算法通过引入注意力机制和时间信息,从而有效地对动态图数据进行建模和分析。通过以上 Python 代码,我们可以方便地构建和训练 TGAT 模型,并在图分类任务中应用它。

2301_79366435的博客 1828

保姆级教程:ABAP 通过 HTTP POST 调用 OData 服务创建业务数据的具体例子

笔者之前的文章发布之后,有朋友在评论区留言,询问 ABAP 除了 Web Service 之外,是否也支持 HTTP 呢?ABAP 这么强大的语言,支持 HTTP 当然不在话下。网上有很多在 ABAP 系统基于 CL_HTTP_CLIENT 工具类,通过 HTTP 协议和第三方系统交互的代码例子。本文介绍笔者项目中一个实际例子,实现的是在 ABAP 系统 A 通过 HTTP 调用 OData 服务,在 ABAP 系统 B 创建业务数据的需求。下面我们按照这个套路来一步步实现。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 700

DP之01背包问题(看这篇就完事)

用二维数组f[i][j]来表示前i个物品,背包容量j下的最优解,当背包容量为j的时候,如果j小于当前i的体积,那对应的以i的物品位置、j的背包容量下的最大价值为上一个i的最大容量,即f[i][j]=f[i-1][j];(2)放入第i个物品,剩余的背包容量变为j-v[i],此时的价值是f[i-1][j-v[i]]+w[i](即前i-1个物品,背包容量为j-v[i]时的最优解,再加上第i个物品的价值w[i])。f[j-v[i]]+w[i]表示放入第i个物品后,背包容量为j时的最大价值。

2301_80170790的博客 2842

GEE:大面积研究区域数据分块导出,以解决内存限制和导出失败的问题

本文介绍了在Google Earth Engine (GEE)平台分块导出大面积研究区域数据的方法。针对直接导出大区域影像易失败的问题,作者提出通过网格分块技术进行处理。文章展示了完整的JavaScript代码示例,包含定义研究区域、加载ESA WorldCover数据集、设置分块参数(包括像素大小、分块尺寸)、创建网格系统、处理坐标转换等关键步骤。代码中还提供了错误处理和导出按钮功能,确保数据能可靠地分块导出到Google Drive。该方法有效解决了大区域数据导出时的内存限制问题,适用于全球范围的研究。

养乐多的博客 1186

DP与01背包问题

最近寒假进行加训,我这个蒟蒻也开始了自己的训练之路,最近刷了不少关于DP的题,感觉背包问题还是比较经典的,就写篇博客记录一下。

weixin_73620843的博客 1635

【思考模型框架】前景理论(Prospect Theory),认为人们并不是完全理性的决策者,而是根据一些心理上的偏差来评估选项的价值

前景理论,是一种行为经济学理论。前景理论,描述了人们在不确定条件下如何作出决策。前景理论,认为人们并不是完全理性的决策者,而是根据一些心理上的偏差来评估选项的价值。

奶爸的编程之路,也就一周冷个三天 1643

[QMT量化交易小白入门]-四十九、中小盘策略是否还有未来,市值再平衡策略,年化收益率124%

该策略旨在通过定期再平衡持仓,保持投资组合中股票数量恒定(),并优先持有市值较小的股票。具体来说,策略每两天(period = 2)进行一次再平衡,根据当前市值对持仓进行调整,以实现微盘股的投资目标。中小市值策略对资金量要求有限制,资金量太大由于流动性不足,滑点可能较大,资金量太小,可能不能达到10-20只持仓,来分散风险,10-100w可能是比较理想的,后续可以根据波动率动态调仓,或波动率大于一定值时触发再平衡加入ROE或其他财务指标,或者研发投入强度大的专精特新企业,进行组合优化。

木头大左的博客 1185

DP的开端【 01背包问题】

【背包】 今天来讲讲背包问题 背包问题是DP问题的一种。 而DP问题离不开三个特性: 最优子结构 无后效性 重叠子问题 在讲背包问题之前,我们先讲讲斐波那契数列。 总所周知斐波那契数列的递推公式是 F(n)=F(n-1)+F(n-2) 但是我们可以画个图看看,在使用递归求解斐波那契数列第N项的时候会发生什么问题 写到这里应该就很清楚了。我们要求F(n)一定要递归求得F(n-1)和F(n-2),但是我们在求F(n-1)的时候,我还需要再递归求一个F(n-2),那么时间的开销就变大了许多许多。这就是上面DP

weixin_45864947的博客 1158

【ARXML专题】-2-创建一个Classic CAN(经典CAN2.0)/CANFD的系统描述ARXML文件

目录 1 创建一个AUTOSAR系统描述 2 物理层命名以及创建ECU 3 新建一个Frame 4 新建一个PDU 5 新建一个signal 6 结尾 AUTOSAR System Description Network Explorer是一个文件编辑器,支持可视化和编辑系统描述的AUTOSAR系统描述文件和ECU摘录的通信内容,它支持架构版本4.0.3、4.1.2、4.2.1、4.2.2和4.3.0。AUTOSAR系统描述(ARXML)文件是基于XML的文件格式,描述网络通信的元素...

「汽车电子助手」的博客 1万+

DP:01背包问题

背包问题是⼀种组合优化的NP完全问题。 本质上是为了找出“带有限制条件的组合最优解”

weixin_51142926的博客 4299

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

01背包问题---dp

01背包问题—dp 题目描述: 有n个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和? 样例输入:【4代表物品个数,8代表体积大小,下面4行代表第i个物品的体积和价值】 4 8 2 3 3 4 4 5 5 6 样例输出: 10 AC代码: #include <stdlib.h> #include <stdio.h> #include <algorithm> #include <iostream> #include

qiaomm的个人博客 484

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

01背包问题(DP)

举个例子,我们算i=5时,我们要算dp[5],可能用到dp[3],dp[4]的值(这里的dp[3],dp[4],是第i=4层的),如果j是从小到大枚举,i=5时,会先算fdp3],dp[4](在第i=5层的值,覆盖掉i=4层的f[3],f[4]值)dp[i][j] = max(dp[i][j],dp[i-1][j-v[i]] + w[i]);转化为dp[j] = max(dp[j],dp[j-v[i]] + w[i]);所以j应该从m开始,从大到小遍历。

weixin_74749489的博客 379

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

动态规划:选择dp及优化01背包问题

选择dp及优化01背包问题

XYY369的博客 762

闫氏DP求解01背包问题

/ 物品数量 和 背包容积int N, V;// 每个物品体积 和 价值// dp数组int main()i

qq_42472229的博客 1126

Day50 01背包问题(一维dp数组)LeetCode416. 分割等和子集

如果装该物品,则背包容量= g(10-6) = g(4) + 9 ,也就是 g(10) = g(4) + 6 ,这里的6显然就是新进来的物品的价值,g(10)就是新记录的,对应二维数组里下一层的值,而这里的g(4)是对应二维数组里上一层的值,通俗的来讲:你要找到上一层也就是上一状态下 背包容量为4时的能装的最大价值,用它来更新下一层的这一状态,也就是加入了价值为9的物品的新状态。将二维dp数组压缩成一维dp数组:dp[j]表示容量为j的背包,所背的物品价值可以最大为dp[j]。即将进来的物品重量为6。

Kimpool的博客 338

1267:【例9.11】01背包问题(从二维优化一维dp问题)

至于说一维dp问题,里面有很许多要注意的细节,与二维dp做比较,有很多问题,以下我一一列举下来,我也一一给出答案。这个代码能够优化到一维的数组,因为你可以这样理解,就是二维数组的每一行,全部把他放到一行里面去,也就是下面这个转换。问:为什么二维背包的遍历顺序背包或者物品重量都可以调换,而优化后一维dp的遍历顺序一定要先是物品然后才是背包?答案:因为二维背包先遍历物品或者先遍历背包都是可以的,因为后面的结果都是基于行和列来算出的结果。

Ricky_youngone的博客 498
上一篇: DP-最长回文子串
下一篇: DP-完全背包问题
SkyeBCI
博客等级 码龄9年 231粉丝 211原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值