【题目描述】 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习。现在有 $N$ 门功课,每门课有个学分,每门课有一门或没有直接先修课(若课程$a$是课程$b$的先修课即只有学完了课程$a$,才能学习课程 ...
分类:
其他好文 时间:
2020-03-05 13:53:48
阅读次数:
56
"题面" 树形 DP 的经典问题。 我们设 $dp_{i,j}$ 表示当前节点为 $i$,当前节点的子树(包含当前节点)最多装的体积是 $j$ 的最大价值。 我们遍历节点的过程就相当于做了一遍分组背包。 注意遍历完所有子节点后要更新一下状态。 ...
问题描述: 解法: 这种树形的结构我们首先很容易去想到 树形dp ,但是和 树形dp 不一样的地方在于它选一个节点的话还有附加条件(也就是依赖关系) 我们对于每一个节点可以把它看成一个分组背包 dp[i][j] 代表 选第 i 个节点 背包容量为 j 的时候 背包的最大价值 我们可以先采取 树形dp ...
分类:
其他好文 时间:
2020-02-02 17:21:12
阅读次数:
93
链接:Miku 此文不是正解,而且主要内容都在代码和注释上 这是暴力分组背包做法 对于每一个主件及其附件,我们的选择是有限的,而且这道题中说了最多两个附件,那么 我们完全可以枚举每一种组合,然后组合成一件新的物品,并且属于同一个集合,然后对处理后的新物品们 跑分组背包就行了 #include<ios ...
分类:
其他好文 时间:
2020-01-20 22:56:22
阅读次数:
74
链接:Miku 分组背包,我们只需要在01背包的基础上稍加修改,把同一类的物品同时枚举即可。 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int n,m; ...
分类:
其他好文 时间:
2020-01-20 22:24:49
阅读次数:
62
题目背景 直达通天路·小A历险记第二篇 题目描述 自01背包问世之后,小A对此深感兴趣。一天,小A去远游,却发现他的背包不同于01背包,他的物品大致可分为k组,每组中的物品相互冲突,现在,他想知道最大的利用价值是多少。 输入格式 两个数m,n,表示一共有n件物品,总重量为m 接下来n行,每行3个数a ...
分类:
其他好文 时间:
2020-01-19 23:51:39
阅读次数:
71
#include <iostream> #include <algorithm> using namespace std; const int N = 110; int n, m; int v[N][N], w[N][N], s[N]; int f[N]; int main() { cin >> n ...
T1 显然,对于一个城堡,要么就不放兵,要么就放到$2 a_i+1$ 然后对于一个城堡,我们首先将对手放兵从小到大排序,然后就是一个分组背包(每一组只能选1个)的问题了QAQ 复杂度$O(nms)$ 因为跑不满上界,所以过得了。 ...
分类:
其他好文 时间:
2019-11-09 17:44:46
阅读次数:
134
[BJOI2019]排兵布阵 题面 链接 题解 直接转化为分组背包 ...
分类:
其他好文 时间:
2019-10-23 09:28:29
阅读次数:
98
题目:https://www.acwing.com/problem/ 分组背包问题描述是共有n组物品,每组物品你只能选一个,求最大价值 二位费用背包也是个比较简单的问题,主要就是将01背包中的体积换为重量和体积两个参数 ...
分类:
其他好文 时间:
2019-10-20 12:41:00
阅读次数:
77