背包DP
sunyutian1998
这个作者很懒,什么都没留下…
展开
-
True Liars POJ - 1417
http://poj.org/problem?id=1417可以发现 a说b是神 则ab同类 反之则异类 这样可以处理出每个连通块内神或魔各有多少个然后dp[i][j]代表走完前i个连通块后且有j个神的情况有多少 顺带记录一下路径即可 因为要求答案唯一 直接输出路径即可#include <cstdio>#include <vector>#includ...原创 2019-02-27 20:37:52 · 166 阅读 · 0 评论 -
有线电视网 洛谷 - P1273
https://www.luogu.org/problemnew/show/P1273只能想到n^3的办法 一看数据量自闭了。。 看了题解也是n^3 智障出题人dp[i][j]代表以i为根的子树选j个用户时得到的最大收益 然后就是树上背包转移一下 最后看根节点上最多选几个人不亏本#include <cstdio>#include <cstring>#...原创 2019-04-22 21:12:26 · 229 阅读 · 0 评论 -
重建道路 洛谷 - P1272
https://www.luogu.org/problemnew/show/P1272dp[cur][i]代表对以cur为根的子树删去i个点的最小代价 当cur的所有子节点v的信息(即dp[v][i])已知后 就是一个背包问题 容量就是cur子树的大小 每件物品的重量就是i 价值就是dp[v][i] 注意这里是分组背包 即每棵子树一个组 对每棵子树只能选一件物品#include &...原创 2019-04-22 19:17:14 · 156 阅读 · 0 评论 -
Least common multiple HDU - 3092
http://acm.hdu.edu.cn/showproblem.php?pid=3092看的题解 首先 拆出的数必须是素数的次幂 假如拆出了14这样的数 他在lcm中的贡献与拆出2和7是一样的 反而浪费了5个数然后就是分组背包了 即x x^1x^2 x^3算一组 只能选其中一个最后 不能在DP过程中取模 这样无法比较大小 可以想到取个对数 化为浮点加法 同时另开一数组记录答案...原创 2019-04-17 20:49:11 · 172 阅读 · 0 评论 -
Coins HDU - 2844
http://acm.hdu.edu.cn/showproblem.php?pid=2844多重背包问题 看有哪些容量可以达成 道理和使价值最大化一样二进制优化一下转为01背包即可这不是男人八题吗 一直以为是很高深的题。。#include <bits/stdc++.h>using namespace std;const int maxn=1e2+10;co...原创 2019-04-17 16:30:57 · 205 阅读 · 0 评论 -
The more, The Better HDU - 1561
http://acm.hdu.edu.cn/showproblem.php?pid=1561先正向拓扑去掉无法到达的点 然后用剩下的点建一正一反两个图然后逆向拓扑 当某点因度数为0而入队列时 说明正向图中他的所有后继节点(即从该点进行BFS能到达的所有点)都已遍历 这和树型DP的思想一样 只不过这里需要考虑的拓扑序稍复杂一些这时可以想到利用01分组背包的思想 dp[i][j]代表从第i...原创 2019-04-16 22:17:48 · 272 阅读 · 0 评论 -
Course Selection System ZOJ - 3956
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3956因为c很小 考虑从c入手当c一定时 得到一个一元二次方程y=x*x-c*x-c*c 因此我们对于每个c确定的方程都求一个最大值即可最小值点为x=c/2 按说想求最大值需要知道两个左右端点 也就是c固定时x所能得到的最小和最大值 但y小于零没有意义 所以x越大...原创 2019-04-08 19:44:49 · 149 阅读 · 0 评论 -
codeforces QDU - 133
https://qduoj.com/problem/133和hdu 3466一个套路观察ai−di∗ti 因为每个题的分数都和时间有关 所有有个先后次序问题 并且ai di ci三个参数中ai与时间无关 不做考虑假设有两个物品(d1 c1)和(d2 c2) 先解决1再解决2的代价是-(d1*c1)-(d2*(c1+c2))先解决2再解决1的代价是-(d2*c2)-(d1*(c1+c...原创 2019-04-08 18:04:50 · 267 阅读 · 0 评论 -
包子凑数 蓝桥真题
http://lx.lanqiao.cn/problem.page?gpid=T440首先 如果所有数的gcd!=1 那就会有无限个数凑不出来当gcd==1时 当然也会有很多数凑不出来 比如给的n个数中最小的是5 那1234都不行 可是当一个数足够大的时候 肯定能被凑出来 具体范围也不是很清楚。。就往大了取 然后完全背包搞一下#include <bits/stdc++.h...原创 2019-04-08 16:29:12 · 300 阅读 · 0 评论 -
AreYouBusy HDU - 3535
http://acm.hdu.edu.cn/showproblem.php?pid=3535对于第一种分组 先将该组dp数组初始化 再从上一组转移过来 先初始化的原因就是 因为该组至少拿一个物品 所以那些无法用该组物品拼凑的重量对应的价值也就没意义了第二种是裸的分组背包第三种是裸的01背包#include <bits/stdc++.h>using namespa...原创 2019-03-11 21:16:29 · 170 阅读 · 0 评论 -
ycb的ACM进阶之路 QDU
点击打开链接这道题按多重背包做会超时 1e5个物品..这就要用到二进制优化 如有17个等重等价(W,V)物品 可合成为重(价)分别为 W(V)*1 W(V)*2 W(V)*4 W(V)*8 W(V)*2 的这几个新物品 这样1e5就变为log(1e5) 时间大大优化这样任意一个1-17范围内的数都可以用这几个二进制系数表示举个例子 假如背包有15单位的容量 重与价都是3的物品...原创 2017-08-15 11:50:41 · 644 阅读 · 0 评论 -
Proud Merchants HDU - 3466
点击打开链接两物品A(p1,q1) B(p2 q2) 先选A则至少需要p1+q2的容量 先选B则至少需要p2+q1 如果p1+q2>p2+q1 那么要选两个的话的就要先选A再选B 公式可换成q1-p1<q2-p2参考博客https://www.cnblogs.com/zhengguiping--9876/p/4994900.html#include <b...原创 2017-09-04 17:26:53 · 279 阅读 · 0 评论 -
Arpa's weak amphitheater and Mehrdad's valuable Hoses CodeForces - 742D
点击打开链接并查集确定各组妹子 每组只选一人或全选 假设某组有k人 则有(k+1)个选择 构成分组背包重点在于理解分组背包 推荐博客点击打开链接其实就是搞个假背包 对于某个分组 其中每个人都有真背包转移而来 暂存到假背包中 最后把真假背包合并一下即可#include <bits/stdc++.h>using namespace std;#define ...原创 2017-09-15 14:08:19 · 281 阅读 · 0 评论 -
Shopping Offers POJ - 1170
http://poj.org/problem?id=1170将每一种交易当作一件物品 每件物品有无数件 问题就转换为完全背包问题(000)(000)(000)(000)(000) 最多5种商品 每种商品用一个八进制数表示其数量 总的状态不超过2^15 以此作为背包容量 而每次交易即每种物品的重量也是对每种商品分开算#include <cstdio>#include...原创 2019-04-18 19:12:29 · 178 阅读 · 0 评论