随笔分类 - ACM / 动态规划
摘要:分组背包是01背包的进阶问题,但是相对于较为简单,主要难在他的衍生问题。 分组背包就是现有n个物品,将这些物品分成若干组,给你一个容量为v的背包,对于每一个组中的物品,你最多只能选择一个,问哪些物品装入背包可以使得在体积总和不超过容量v的情况下,价值总和最大。 递推公式 可以看出分组背包和01背包有
阅读全文
摘要:题目链接:导弹拦截 思路 代码 #include <bits/stdc++.h> using namespace std; const int N = 1e5 + 5; int a[N], x, l, dp[N], maxn; int g[N], cnt; int main() { while (c
阅读全文
摘要:题目链接:最大子树和 思路 由于可以无限剪枝,所以假设以节点1为根,并删去所有美丽质数小于0的子树,又考虑到可能会出现根节点为负数,导致可能会只留下子树而把节点1为根节点的其他部分扔掉,所以需要dp数组记录,dp[i]为以节点i为根节点能得到的最大的美丽指数,贪心将节点i的子树中所有美丽指数之和小于
阅读全文
摘要:题目链接:数字三角形 思路 dp:金字塔顶的元素为起点,金字塔每行的最左侧数字只能从上一层的最左侧数字到达,如7 -> 3 -> 8 -> 2 -> 4,这些数字中的每一个(除起点7外)都只能从上一层的最左侧数字到达,递推公式为dp[i][1] = max(dp[i][1], num[i][1] +
阅读全文
摘要:题目链接:二叉苹果树 思路 本题使用链式向前星存储树上的边,然后DFS搜索+简单dp。 dp数组,dp[i][j]表示节点i及其子树保留k根树枝得到的最大苹果数。son数组存储当前节点的孩子节点的编号和当前节点与孩子节点之间的树枝上的苹果个数。 对于dp递推公式,我们可以对每一个节点逐个分析,对于每
阅读全文
摘要:题目链接:没有上司的舞会 思路 这是一道树形dp的入门题,也可以用DFS+记忆化搜索来理解,要注意的地方是,输入关系时先输入的l为后输入的k的下属,所以存储边时需要注意。 在面对图论或者树的存储时通常可以使用链式向前星(如下代码中的add函数)或者STL中的vector存储边。 链式向前星和vect
阅读全文

浙公网安备 33010602011771号