背包dp
Anxdada
多读书多看报, 少吃零食多睡觉
展开
-
背包九讲的小理解
动态规划的入门算法, 简单形象又好理解 : 大牛的博客 只提醒一些比较重要的知识, 其他的都去看这个大牛的博客 1 : 01背包 问题描述: 有n中物品, 背包容量是tot, 每种物品都有一个体积和价值, 常规询问tot容量的背包最多能得到多少价值. 最优复杂度做法O(NV). 最基础的二维表示状态 dp[i][j] 代表前i件物品当前的j体积下的最优值. 转移方程为 : dp[i...原创 2017-06-22 18:29:44 · 413 阅读 · 0 评论 -
POJ 1742 Coins 【多重背包的应用 + 理解】
传送门 // 题意: 有n中价值的硬币和数量, 问用这些硬币可以构造出1-m中多少个数.思路: 乍一看就是多重背包的题意, 所以我们用dp[x] 表示x是否可以被表示出来, u[x]保存的是当前这个x使用了多少个当前枚举的v[i]. 然后n*m的枚举即可. AC Codeint dp[maxn], u[maxn];// u[x] 保存的是当前这个x使用了多少个当前枚举的v[i].int v[1原创 2018-03-06 16:40:10 · 317 阅读 · 0 评论 -
HDU 2639 Bone Collector II 【01背包的第k优解】
传送门 // 题意: 就是求在01背包的第k优解.// 思路: 为了存第几优解, 我们需要再加一维表示当前是第优解, 即dp[i][j] 代表 背包容量为 i 时, 第 j 优解的价值是多少, 那么我们更新的时候就要再加一个for循环, 那就是for第几优解, 然后把当前的值和一个新的可以被更新的值全部保存下来, 去重后再按照从大到小的顺序再次分配回去即可…… 实际上就是第2优解有可能是...原创 2018-03-13 11:02:56 · 298 阅读 · 0 评论 -
HDU 2159 FATE 【二维费用完全背包】
传送门 // 题意: 有k种怪物. 告诉你每种怪物杀死以后有a点经验值, 同时主人的忍耐度减少b, 并且他最多杀死s只怪物, 问能否到达n点经验值, 如果能到达输出最多可能剩余多少忍耐度.// 思路:乍一看就是个完全背包, 但是有s数量的限制, 所以就不是单纯的一维了, 所以我们往二维上面想, 其实想一想就知道s可以作为第二维, 表示没次杀死一只怪物后同时受到两种伤害, 即b 和 1, 那么...原创 2018-03-11 19:40:46 · 232 阅读 · 0 评论 -
HDU 1561 The more, The Better 【树形dp + 依赖性01背包 】这类型入门题.
传送门 // 题意: 这里有n座城堡, 每座城堡有一个价值并且他们之间有一定的联系, 即如果你要攻守b城堡, 它又被a城堡所保护, 那么你必须先攻守掉a城堡, 问最多攻破m座城堡的条件下, 能获得的最大价值是多少.// 思路: 这是一个背包九讲中所提到到的依赖性背包, 即如果你要选择某件物品, 则必须先选择其他物品, 因为每座城堡就是攻与不攻的区别所以是个依赖性01背包, 但是又是在图中, ...原创 2018-03-10 22:16:15 · 260 阅读 · 0 评论 -
HDU 2955 Robberies 和 HDU 1203 I NEED A OFFER!【思维转化 + 01背包】好题 !!!
这两道题非常相似, 思维和处理方式, 都是好题, 所以就放在一起说了…. HDU-2955 这一道要经典一些. // 题意: 有n家银行, 每家银行对应着一个被抓的概率, 并且给出它能忍受的最低被抓概率, 问这个人最多可以抢多少钱.// 思路: 原先以为只会精确到小数点后两位, 傻逼的就敲了, 后面才意识到是个浮点数, 没说是几位啊, 所以我们有两个问题要解决, 1:浮点数不好作为背包容...原创 2018-03-10 22:15:07 · 185 阅读 · 0 评论 -
HDU 1114 Piggy-Bank 【求最小值的完全背包】
传送门 // 题意: 给定一个存钱罐的空体积和装满前的体积, 给定n种硬币的价值以及体积, 问能否刚好把存钱罐装满, 并且装满后的存钱罐最少的钱是多少, 其中n种硬币可以用任意次.思路: 任意次就是完全背包, 然后要恰好装满, 那么dp初始或还是为inf(因为这求的是最小值), dp[0] = 0, 然后max 改成 min 即可…….AC Codeconst int maxn = 5e2+5;原创 2018-03-10 19:48:58 · 288 阅读 · 0 评论 -
CCCC 题目集 L3 001 凑零钱 【背包 + 记录路径 + 思维】
传送门 // 题意: 给定n枚硬币的价值, 给出一个容量m, 问能否恰好在这n个中选择一些硬币使得其价值和加起来等于m, 并输出你选择的这些硬币的价值, 如果有多种选择, 输出字典序最小的那种.思路: 首先肯定是01背包没错, 但是同时我们要注意几个点, 一个是要恰好构成, 所以dp初始化时除0外都初始化为-inf, dp[0] = 0. 也就是恰好装满背包的最优解. 同时更新的是还要同时记...原创 2018-03-10 16:44:13 · 522 阅读 · 0 评论 -
HDU 1864 最大报销额 【01背包】
传送门 // 题意是中文就不重复了…. 思路也很简单就是个普普通通的01背包类型. 就说几个坑点…..1: 这个保证了只精确到小数点后2两位, 也就是我们可以通过将钱扩大100倍使得下标允许范围内的… 所以范围要大一点….. 这一点在题目中没有说…2: 题目虽然说的是”单项物品的价值”, 但是这里的项指的是一类……. 所以每一类的价钱要分开统计……然后就是普通的01背包了…. 这种题太坑了,描述不原创 2018-03-15 20:46:23 · 205 阅读 · 0 评论 -
百练 4102 宠物小精灵之收服 【二维费用01背包】
传送门 // 题意: 有k个怪物, 告诉每个怪物捕捉它需要的精灵球和皮卡丘收到的伤害, 给定精灵球的一共的数量和皮卡丘总的体力值, 问最多可以捕捉到多少个怪物, 然后如果能捕捉到的怪物相同则要消耗的体力值尽量的小….思路: 很明显的二维背包费用的题, 加了一维费用那么dp数组同时加一维即可……捡起一个物品所需要付出两种代价, 所以dp[i][u][v] 代表捕捉前i个怪物用掉精灵球u个, 体...原创 2018-03-08 21:04:22 · 1299 阅读 · 0 评论 -
FJUT 2764 生日礼物 【思维 + 01背包】
传送门 // 题意: 每个都带来了两本书, 一本送给妹妹, 一本送给哥哥, 每个人都要送出去, 每本书都有自己的价值, 问如何送可以使哥哥得到的价值与妹妹得到的价值差最小….// 思路: 这道题还是很有意思的, 好像是NOIP的题, 我们首先把每个人送的两本书的差值算出来并保存, 并同时求其和(sum), 然后是要分给两个人的, 所以我们把差值的和/2(设为tot)作为背包容量, 然后每一个a[i原创 2018-03-07 18:20:32 · 340 阅读 · 0 评论 -
HDU 4341 Gold miner 【思维 + 分组背包好题】
传送门 // 题意: 一个在(0, 0) 处抓金子, 对于每个金子都要它被抓到的时间和价值, 问在T时间内所能获得的最大价值是多少. 对于斜率相同的点只能先抓近的, 再抓远的. // 思路:我们首先将所有的点按照斜率排序, 斜率相同的离原点近的在前面, 然后对于斜率相同的点, 我们把其分到一组, 假如6个点分组为(1) (2, 3) (4, 5, 6), 那么对于(2, 3)这个组, 我们...原创 2018-03-06 22:33:28 · 289 阅读 · 0 评论 -
HDU 1712 ACboy needs your help 【分组背包裸题】
传送门 // 题意: 给定n个课程m天,然后输入一个矩阵A[i][j] 代表花费j天在课程i上可以获得的价值, 问如何分配这m天可以使得到的价值最大.我们可以分析得到对于第i个课程就代表了第i组, 该行中每个数与对应的列标表示价值与体积, 那么就是很简单的分组背包了. 详见背包九讲….. 就是要注意那个枚举的顺序!AC Codeconst int maxn = 1e2+5;int n, m;i原创 2018-03-06 21:06:18 · 226 阅读 · 0 评论 -
NYOJ 203 三国志 【最短路 + 01背包】
传送门 // 题意: 这道题和HDU 3339很类似, 就是每一个城市有一个价值, 每一个城市必须排一个人去才能获得该价值的珠宝, 这个人一个单位距离要消耗一个(石)粮食, 现在他手里有s(石)粮食, 问最多获得多少的珠宝. 所有人都从0号城市出发.// 思路: 很明显要走最短路, 其次是对于一个城市我们可以选择去或者不去, 那么就是经典的01背包问题了, 我们首先求出0到其他所有城市的最短...原创 2018-01-31 18:00:11 · 349 阅读 · 0 评论 -
HDU --- 6082 度度熊与邪恶大魔王 【完全背包】
传送门 //题意 : 中文的还是不要偷懒, 自己读吧. //思路 : 利用完全背包. dp[i][j]代表打死防御力为i, 生命值为j的怪兽最少需要消耗的晶体数. 由于技能可以被无限多次使用, 那么这就有点类似完全背包了, 每一种物品可以放无限多次. 所以就是一道裸题了, 直接上就是了, 注意维护的一个最小, 即可以打倒高血量的晶体数那么也一定可以打倒低血量的, 所以需要更新一个最小值. 因为我原创 2017-08-22 20:10:21 · 444 阅读 · 0 评论 -
POJ 1948 Triangular Pastures 【经典问题 - 二维01背包求最大三角形】
传送门 // 题意 : 现在有n根木棍, 要求把这些木棍全部用上, 能组成的最大三角形面积是多少. 不能组成输出-1.思路: 这个问题就很经典了, 我们首先看数据范围, 最多40根, 每根最长40, 那么周长最长1600, 那么我们就要枚举到1600?显然不是的, 我们可以利用好三角形的边长特点, 可以发现最长的边是周长的一半即800, 所以我们设dp[i][j][k] 代表前i个木棍存在两边长为原创 2018-03-19 22:13:02 · 388 阅读 · 0 评论