ACM - 9.3 0-1背包问题

比特幽影
• 阅读 3144

9.3.1 多阶段决策问题

  • 9.4 物品无限的背包问题

无权变成有权,本质上背包问题就是有向带权图,即DAG + weighted.

  • 9.5 0-1 背包问题
c    for(int i = n; i >=1 ; i--)
        for(int j = 1; j <= n; j++)
        {
            dp[i][j] = i == n ? 0 : dp[i+1][j];
            if(j >= V[i]) 
                dp[i][j] = max(dp[i][j], dp[i+1][j-V[i]] + W[i]);
        }

9.3.2 规划方向

  • 下面这种dp有利于不存边,进而扩展到滚动数组.
  • 边界方面,i=0时为0,j<0时为负无穷,最终答案为f(n,C).
c    for(int i = 1; i <=n ;i++)
        for(int j = 0; j <= C; j++)
        {
            f[i][j] = (i == 1 ? 0 : f[i-1][j]);
            if(j >= V[i]) f[i][j] = max(f[i][j], f[i-1][j-V[i]] + W[i]);
        }

9.3.3 滚动数组

把f变为一维数组,本质上还是那么理解,只是之前的元素还没有被覆盖

c    memset(f, 0, sizeof(f));
    for(int i = 1; i <= n; i++)
    {
        scanf("%d%d", &V, &W);
        for(int j = C; j >= 0; j--)
            if(j >= V) f[j] = max(f[j], f[j-V] + W);
    }
点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Kubrnete Kubrnete
4年前
初步了解01背包问题(分治篇)
目录问题描述(问题描述)输入格式(输入格式)输出格式(输出格式)基于0/1背包的迭代算法(基于01背包的动态规划算法)0/1背包问题的分析(01背包问题的分析)分治法(分治法)总结(总结)问题描述Coda非常喜欢玩“NewWorldOnline”,受到某部动画的影响,他
Kubrnete Kubrnete
4年前
完全背包问题
问题描述有n种物品和一个容量为c的背包,每种物品都就可以选择任意多个,第i种物品的价值为v\i\,体积为w\i\,求解:在不超过背包容量的情况下,选择放入哪些物品能够使得背包中的价值最大?跟01背包一样,完全背包也是一个很经典的动态规划问题,不同的地方在于01背包问题中,每件物品最多选择一件;而在完全背包问题中,只要背包装得下,每件物品可
Stella981 Stella981
3年前
Python Challenge Level 18
初学Python,挑战一下流行的PythonChallenge,很不幸,卡在了18关~~被字符字节码之间的转换搞得焦头烂额,不过终于搞定了还是很happy的~~~主要的问题就是16进制形式的字符如何转成字节码(注意:不是encoding)如:\'89','50','4e','47','0d','0a','1a','0a','00
Stella981 Stella981
3年前
JS 苹果手机日期显示NaN问题
问题描述newDate("2019122910:30:00")在IOS下显示为NaN原因分析带的日期IOS下存在兼容问题解决方法字符串替换letdateStr"2019122910:30:00";datedateStr.repl
Wesley13 Wesley13
3年前
Unity3D学习笔记(二十六):MVC框架下的背包系统(1)
MVC背包!(https://oscimg.oschina.net/oscnet/dd09a8a61054c24d33e9fd2e8c3850eab02.png)需求:1、背包格子的装备是可以拖动的2、装备栏的装备也是可以拖动的3、当背包格子的装备拖动到装备栏时,如果是装备类型和装备栏类型是一致的能装上4、背包的装备是按照顺序放在
Stella981 Stella981
3年前
A Mini Locomotive(动态规划 01)
 /\ 题意:选出3个连续的数的个数 为K的区间,使他们的和最大分析: dp\j\\i\max(dp\jk\\i1\value\j\,dp\j1\\i\);dp\j\\i\:从j个数种选出i个连续区间 数值的最大和value\j\:第j个区间内的数的和和背包有点像,但要活用\
Wesley13 Wesley13
3年前
01背包问题(动态规划求解)
这两天c的习题开始不考察c了,开始考察动态规划问题,唉,没学过动态规划算法来编这题目真是一把辛酸泪,下面给出题目(题目来源:郭玮老师的mooc)2:CharmBracelet查看提交统计提问总时间限制:1000ms内存限制:65536kB描述Bessiehasgonetothemall’s
深度学习 深度学习
2个月前
动态规划进阶:牛客4802题带附件背包问题详解 | 组合优化技巧
一、问题背景与算法思路牛客4802题是一个典型的带附件的背包问题变种,要求在主件和附件存在依赖关系的情况下,选择物品组合使总价值最大化。本文通过动态规划方法,将问题转化为分组背包问题,通过预处理所有可能的组合方式来实现高效求解。二、完整代码实现(带详细注释
深度学习 深度学习
1个月前
NOIP 2005 普及组 洛谷1048题 解题思路和步骤 C++实现带注释
一、解题思路:‌问题分析‌:给定背包容量T和M个物品(草药),每个物品有采摘时间t‌:若当前物品时间超过剩余时间:dp‌:使用滚动将空间复杂度从O(NV)降为O(V),需逆序遍历时间。二、代码实现:Cincludeusingnamespacestd;i