博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

随笔分类 -  动态规划——背包DP

1
摘要:咕咕 阅读全文
posted @ 2021-04-04 21:09 SovietPower 阅读(326) 评论(0) 推荐(0) 编辑
摘要:有体积分别为1,2,...,8的物品,给定各自的数量cnt1,cnt2,...,cnt8W,求这些物品能组成的最大且不超过W的体积和。 cnti1016, W1018阅读全文
posted @ 2021-03-06 16:00 SovietPower 阅读(151) 评论(0) 推荐(0) 编辑
摘要:数x的价值定义为:x十进制表示中第i位为3则该位价值为Fi,该位为6价值为2Fi,为9价值为3Fi,否则为0,然后所有位上价值相加。 给定KQ次询问,每次询问给定n,求满足K个数的和为n情况下,这K个数的最大价值和。 n,K999999,q105阅读全文
posted @ 2021-02-20 16:14 SovietPower 阅读(129) 评论(0) 推荐(0) 编辑
摘要:给一棵n个点的树,每个点有体积ai和价值bi,求总容量分别为1m时选出一个最大价值独立集(相邻节点不能同时选)的方案数。 n50,m5000阅读全文
posted @ 2021-02-19 21:11 SovietPower 阅读(335) 评论(0) 推荐(0) 编辑
摘要://// 阅读全文
posted @ 2020-11-11 11:30 SovietPower 阅读(310) 评论(1) 推荐(1) 编辑
摘要:补完了 阅读全文
posted @ 2020-09-17 19:02 SovietPower 阅读(318) 评论(7) 推荐(2) 编辑
摘要:给定一棵树,任选一个连通块然后做背包,且每个点上的物品至少取一个。求花费为m时最大价值。 阅读全文
posted @ 2019-01-21 22:42 SovietPower 阅读(548) 评论(0) 推荐(0) 编辑
摘要:"BZOJ" "洛谷" 这个数据范围。。考虑暴力一些把各种信息都记下来。不妨直接令f[i][j][k][0/1]表示当前为点i,离i最近的建了伐木场的i的祖先为jii子树一共建了k个伐木场。0/1表示点i是否建了伐木场。 发现对于i的子树里的点v阅读全文
posted @ 2018-12-06 17:31 SovietPower 阅读(168) 评论(0) 推荐(0) 编辑
摘要:ooorz 阅读全文
posted @ 2018-12-03 09:39 SovietPower 阅读(2097) 评论(0) 推荐(0) 编辑
摘要:"BZOJ" "洛谷" 退背包。和原DP的递推一样,再减去一次递推就行了。 cpp //1136kb 56ms include include include define gc() getchar() const int N=2005; int w[N],f[N],g[N]; inline int 阅读全文
posted @ 2018-10-22 17:54 SovietPower 阅读(302) 评论(0) 推荐(0) 编辑
摘要:2018.10.21 牛客提高集训营6 比赛链接 不是很懂那些粘人代码还直接交上去的人,在提交记录里很好看么? A 最长路(拓扑 分层) 题目链接 容易想到建反图拓扑。有了最长路后,按最长路对图分层。 因为当前点路径字典序最小,就是要满足第一条边最小后,再满足下一个点路径字典序最小。后者可以直接用上 阅读全文
posted @ 2018-10-21 21:00 SovietPower 阅读(297) 评论(0) 推荐(0) 编辑
摘要:"BZOJ" "洛谷" 最小可到达点对数自然是把一条路径上的边不断反向,也就是黑白染色后都由黑点指向白点。这样答案就是n1。 最大可到达点对数,容易想到找一个点a,然后将其子树分为两部分x,yx子树所有边全指向aay子树之间的边全指向y。这样答案就是$sz[x 阅读全文
posted @ 2018-10-17 19:17 SovietPower 阅读(236) 评论(0) 推荐(0) 编辑
摘要:题目链接 洛谷 题意:01背包,但重量为a×2b形式,可能很大。 把重量表示为a×2b的形式,然后按b排序。 从高到低枚举每一位,f[i]表示当前位容量为i时的最大价值(容量即a\times2^)。对于同一位,直接01背包就行了。 如何转移到下一位? 阅读全文
posted @ 2018-10-17 16:54 SovietPower 阅读(140) 评论(0) 推荐(0) 编辑
摘要:难得一场良心普及5连测? 阅读全文
posted @ 2018-10-15 19:17 SovietPower 阅读(155) 评论(0) 推荐(0) 编辑
摘要:给定一棵n个点的树。将这n个点两两配对,并对每一对点的最短路径染色。求有多少种配对方案使得所有边都至少被染色一次。 n5000阅读全文
posted @ 2018-10-09 15:00 SovietPower 阅读(347) 评论(0) 推荐(1) 编辑
摘要:"题目链接" 如果贪心,正的显然先选。然后处理负的,好像要用背包。 看这数据范围不如直接用背包。f[i][j]表示前i个物品,剩下j个钩子的最大价值。 因为没有钩子的放前面无法转移,所以先按Ai排序。 因为数据多 开N N的数组在bzoj上跑的好慢。。 cpp //1048kb 6 阅读全文
posted @ 2018-09-19 17:09 SovietPower 阅读(240) 评论(0) 推荐(0) 编辑
摘要:"题目链接" 树形DP,考虑子节点对父节点的贡献。 设f[x][i][j]表示当前为x,用i个x去合成上一层装备,花费为j的最大价值。 由子节点转移时 是一个分组背包,需要一个辅助数组g[i][j]表示前i棵子树花费为j能贡献给x的最大价值。 那么 $g[i][j] = max{g[i 1][j k 阅读全文
posted @ 2018-04-27 15:16 SovietPower 阅读(169) 评论(0) 推荐(1) 编辑
摘要:题目链接 一个长度为n的循环节,在k×n(k1)次之后一定会回到原样。 用ai表示每个循环节i的长度,那么所有n个数字的排数为lcm(a1,a2,,ak)(+1),其中ai满足i=1kai=n. 所以题目实 阅读全文
posted @ 2018-03-31 17:30 SovietPower 阅读(157) 评论(0) 推荐(0) 编辑
摘要:"题目链接" Description 每个点有费用si与价值pi,要求选一些带根的连通块,总大小为k,使得 pisi 最大 Solution 01分数规划,然后dp,设f[i][j]表示i子树选j个的最大权值和,直接暴力背包转移即可 在枚举子节点选的数量时,假设x有 阅读全文
posted @ 2018-02-23 18:06 SovietPower 阅读(138) 评论(0) 推荐(0) 编辑
摘要:"题目链接" (卡常背包) 朴素的多重背包是: f[i][j]=max{f[i1][jkv[i]]+kw[i]},复杂度 O(nVnumi) 可以发现求max时有很多值是被重复枚举过的 换一种方程表示形式,对于每个v[i],设$j=K v[i]+ 阅读全文
posted @ 2018-02-22 16:35 SovietPower 阅读(332) 评论(0) 推荐(0) 编辑

1
点击右上角即可分享
微信分享提示