![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
背包
swqeaaa
有问题可以吻我
展开
-
HDU 1114 Piggy-Bank 完全背包
http://acm.hdu.edu.cn/showproblem.php?pid=1114题意:有一堆钱币, 已知它的总重量, 知道每种钱币的重量和价值, 求钱币堆的最小总价值思路:完全背包,每种物品可以取无限次dp[i] i表示当前重量 dp[i]表示最小的价值递推式: 初始化:代码:#include<bits/stdc++.h>#define...原创 2019-04-18 18:46:30 · 150 阅读 · 0 评论 -
多重背包 模板题 二进制拆分 洛谷 P1776 宝物筛选
每类物品每2的幂次分成一组, 每个小组合并为1个大物品, 做01背包.重新划分新物品要注意两点:Ⅰ2的幂次从小到大枚举Ⅱ拆分有剩余直接将剩下的放入.代码:int n;ll W, dp[M], v[M], w[M], m[M];struct node {ll v, w;};vector<node> obj;void init() { n = read(), W...原创 2019-08-15 20:48:03 · 299 阅读 · 0 评论 -
树上背包的O(nV)做法 HDU1561 洛谷P1064
虽然连续依赖可能构成森林, 但我们可以虚构一个超级根节点解决这个问题.普通的做法:HDU 1561对于一棵树, 我们考虑从叶子节点一路推到根节点来计算总的最大价值. 按深度从深到浅依次枚举每个节点, 每个节点枚举子节点的每个泛化物品更新当前节点的泛化物品. 这样的做法很容易想到, 但是复杂度是O(nV2)O(nV^2)O(nV2)的.dp[i][j]dp[i][j]dp[i][j]表示考虑...原创 2019-08-20 22:59:07 · 310 阅读 · 0 评论 -
洛谷 P2967 依赖背包
主件有花费无价值, 附件有花费有价值, 附件没有附件, 主件50个, 每个主件有10个附件, 背包容量1e6, 问最大价值.之前做依赖背包和树上背包都是O(nV2)O(nV^2)O(nV2)的复杂度…毫无疑问会T…看了题解原来有O(nV)O(nV)O(nV)复杂度的做法.注意: 这是依赖背包的O(nV)O(nV)O(nV)做法, 树上背包因为有连续依赖, 必须借助dfs(类似树形dp)的方式才...原创 2019-08-20 11:33:26 · 262 阅读 · 0 评论 -
HDU 5188 zhx and contest 贪心 01背包
题意: 共30个题, 每个题有花费的时间(1e5), 价值(1e9), 最早可提交时间(1e5), 问最早在什么时间做题总价值达到W(1e9).思路:选择先做哪个题会影响到下一个题的开始时间.先做允许提交时间最早的题不是最优的.应当先尝试做 最早提交时间 最早的 题.先按上面的要求对题目排序, 再01背包.背包时注意当前时间要晚于允许提交时间.参考:https://bl...原创 2019-07-11 14:19:16 · 94 阅读 · 0 评论 -
HDU 3449 Consumer 有依赖背包 分组背包 (算法有问题)
题意: 有50个盒子, 每个盒子里有10个物品, 物品有价值和花费, 盒子只有花费, 只有买了盒子才能买其中的物品, 问总共花P块钱(P<100000)最多能得到多少价值.思路:①一开始不记得有依赖背包, 想起之前写的挖矿的题, 以为可以直接写分组背包, 以下是错误的思路:对于每个盒子, dfs遍历这个盒子内所有的取法, 然后每个盒子是一个分组, 跑分组背包.复杂度: dfs...原创 2019-07-11 10:53:14 · 145 阅读 · 0 评论 -
HDU 3236 Gift Hunting 01背包(*3) 有物品必须取
题意: 有两张购物卡, 面额为v1, v2, 有一次一键购买机会(不花钱), 物品有价值和花费, 一些物品是必须取的, 问获得的最大价值是多少.思路:①买的物品分到两张购物卡和一次一键购买上, 相当于3个01背包.②在更新dp数组时, 如果当前物品是必须取的, Ⅰ它不能由自己转移(不能不取当前物品), Ⅱ如果不能由其他状态转移, 那么这个状态就是不可达的.代码:#includ...原创 2019-07-11 19:13:02 · 115 阅读 · 0 评论 -
POJ 1015 Jury Compromise dp 01背包 输出路径
http://poj.org/problem?id=1015题意: 两个数x, y初始是0, 共有n个操作, 每个操作向x加a, y加b, 要求选出恰好m次操作, 使得x和y的差最小, 在此基础上, 令x+y最大, 输出最终x和y的值, 并按升序输出都取了那几个位置的数.思路:双塔dp, dp[i][j]中i表示已经取了i个数, j表示x和y当前的差是多少.所以, 枚举取了几个数→枚举...原创 2019-04-28 17:23:45 · 109 阅读 · 0 评论 -
洛谷 P2079 烛光晚餐 背包
题目题意: 背包容量为V, 有n个物品, 每个物品有a价值, b价值, 和代价, 要使总的a价值不小于0, 在此基础上总的b价值最大.思路: 背包dp[j][k]中, j代表当前背包容量, k代表当前a价值是多少(将负的平移到正数范围内,0->500), dp[j][k]表示当前最大b价值.递推式:dp[j][k]=dp[j-v[i]][k-a[i]]+b[i]dp顺序:...原创 2019-05-09 19:40:58 · 177 阅读 · 0 评论 -
HDU 4341 Gold miner 分组背包 并查集
题目题意: 黄金矿工. 将每个矿抽象成点, 给出每个矿的坐标, 得到这个矿的时间和矿的价值, 问在有限的时间内, 得到的最大价值是多少.思路: 同一条线上的矿, 前面的不取后面的就不能取. 那么可以将同一条线上的点分到同一组, 组内按照从近到远的顺序排序, 考虑分组背包, 组内的第j个元素是第1→第j个矿石的总价值/代价, 每个组内只能取1个元素.代码:#include<b...原创 2019-05-08 19:41:52 · 137 阅读 · 0 评论 -
NUDT校赛 E Missile 背包dp 概率
题目题意: 有n个目标, n种导弹, 第i种导弹只能打第i个目标, 给出每种导弹命中的概率, 每种导弹的成本(元/个), 总价值为总成本为问在总价值不小于s的情况下, 最小成本是多少.思路:①概率问题: 假设某火箭发射k次, 全都没命中的概率是 , 那么命中的概率就是, 那么一种火箭的价值贡献就是,一种火箭的成本就是.②考虑dp dp[i]表示当前总花费, i表示...原创 2019-05-05 20:51:38 · 143 阅读 · 1 评论 -
树上背包入门 HDU 1561 O(n*V^2)的做法
有依赖背包是有多个主件, 每个主件有多个附件, 但是附件不会再有自己的附件.而树上背包就是构成了连续依赖的背包, 他们的关系是一棵树(保证不会循环依赖, 每个物品只会依赖最多1个物品)(取了根节点才能取第二层的节点, 取了x节点才能取x的儿子节点, 取了从根节点的一条链才能取叶子节点).对于这样的问题, 我们的核心思想是: 树上背包=分组背包+依赖背包.我们按照从叶子到根的顺序处理, 保证处...原创 2019-08-17 10:34:09 · 185 阅读 · 0 评论