随笔分类 - 动态规划——背包DP
1
摘要:咕咕
阅读全文
摘要:////
阅读全文
摘要:
补完了
阅读全文

摘要:给定一棵树,任选一个连通块然后做背包,且每个点上的物品至少取一个。求花费为时最大价值。
阅读全文
摘要:"BZOJ" "洛谷" 这个数据范围。。考虑暴力一些把各种信息都记下来。不妨直接令表示当前为点,离最近的建了伐木场的的祖先为,及子树一共建了个伐木场。表示点是否建了伐木场。 发现对于的子树里的点,
阅读全文
摘要:ooorz
阅读全文
摘要:"BZOJ" "洛谷" 退背包。和原DP的递推一样,再减去一次递推就行了。 cpp //1136kb 56ms include include include define gc() getchar() const int N=2005; int w[N],f[N],g[N]; inline int
阅读全文
摘要:2018.10.21 牛客提高集训营6 比赛链接 不是很懂那些粘人代码还直接交上去的人,在提交记录里很好看么? A 最长路(拓扑 分层) 题目链接 容易想到建反图拓扑。有了最长路后,按最长路对图分层。 因为当前点路径字典序最小,就是要满足第一条边最小后,再满足下一个点路径字典序最小。后者可以直接用上
阅读全文
摘要:"BZOJ" "洛谷" 最小可到达点对数自然是把一条路径上的边不断反向,也就是黑白染色后都由黑点指向白点。这样答案就是。 最大可到达点对数,容易想到找一个点,然后将其子树分为两部分,子树所有边全指向,与子树之间的边全指向。这样答案就是$sz[x
阅读全文
摘要:题目链接 洛谷 题意:01背包,但重量为形式,可能很大。 把重量表示为的形式,然后按排序。 从高到低枚举每一位,表示当前位容量为时的最大价值(容量即)。对于同一位,直接背包就行了。 如何转移到下一位?
阅读全文
摘要:"题目链接" 如果贪心,正的显然先选。然后处理负的,好像要用背包。 看这数据范围不如直接用背包。表示前个物品,剩下个钩子的最大价值。 因为没有钩子的放前面无法转移,所以先按排序。 因为数据多 开N N的数组在bzoj上跑的好慢。。 cpp //1048kb 6
阅读全文
摘要:"题目链接" 树形DP,考虑子节点对父节点的贡献。 设f[x][i][j]表示当前为x,用i个x去合成上一层装备,花费为j的最大价值。 由子节点转移时 是一个分组背包,需要一个辅助数组g[i][j]表示前i棵子树花费为j能贡献给x的最大价值。 那么 $g[i][j] = max{g[i 1][j k
阅读全文
摘要:"题目链接" 每个点有费用si与价值pi,要求选一些带根的连通块,总大小为k,使得 最大 01分数规划,然后dp,设f[i][j]表示i子树选j个的最大权值和,直接暴力背包转移即可 在枚举子节点选的数量时,假设x有
阅读全文
1