集训Day 9 2020.3.9 动态规划(四)

集训Day 9 2020.3.9

动态规划(四)

1.HDU-2196

给一棵树,有n个结点,结点之间的边有权值,问每个结点的最远结点距离其多远 介绍一个定义:树的直径指的是树上两个最远点对。

题解

求法1:任取点u,找到离他最远的点v,然 后再找离v最远的点w,则\((v,w)\)为直径。
求法2:维护dp[u][0/1]为u子树内以u为端点 的最长路/次长路,答案就是 dp[u][0]+dp[u][1];

我们还有一个定理,对于树上任意一个点 它的最远点对必定为直径两个点之间的一个。 故复杂度三次dfs
对于求法1和之后的用处的证明可以课后自行查看: https://blog.csdn.net/u011426016/article/details/89164896

2.P1077 摆花

小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共\(m\)盆。通过调查顾客的喜好,小明列出了顾客最喜欢的\(n\)种花,从\(1\)\(n\)标号。为了在门口展出更多种花,规定第\(i\)种花不能超过\(a_i\)盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列。
试计算,一共有多少种不同的摆花方案。

题解

这题实际上是最简单的
f[i][j]表示我取了前\(i\)种花,拿了\(j\)盆花的方案,则

f[i][j]+=f[i-1][j-k](0<=k<=ai)

记得取模

3.U53204 选课加强版

(原P2014 选课)
https://www.luogu.com.cn/problem/U53204

现在有 \(N\) 门功课,每门课有个学分,每门课有一门或没有直接先修课(若课程a是课 程b的先修课即只有学完了课程\(\text A\),才能学习课程\(\text B\))。一个学生要从这些课程里选择\(\text M\)门课程学习,问他能获得的最大学分是 多少?

题解

树形背包O(nm)的做法
题解来自洛谷
https://www.luogu.com.cn/blog/P6174/solu tion-p2014

4. P1091 合唱队形

【题面待补充】

题解

求一次最长上升子序列和一次最长下降子 序列即可。

5.POJ1651

乘法游戏是在一行牌上进行的。每一张牌包括了一个正整数。在每一个移动中,玩 家拿出一张牌,得分是用它的数字乘以它 左边和右边的数,所以不允许拿第1张和最 后1张牌。最后一次移动后,这里只剩下两 张牌。你的目标是使得分的和最小。\(n\le 200\)

题解

dp[i][j]表示i~j区间做乘法游戏得到的最 值。显然长度为3的时候别无选择只能拿中间的。
那剩下的情况可以为:枚举最后拿的数,递归左右边,最后显然乘起来的就是左右 边界和最后的这一个数。

6.HDU5115

\(n\)匹狼,每一次攻击可以秒杀一匹狼,但同时会受到这匹狼的\(\text A\)攻击和它相邻两只狼 的\(\text A\)
给定\(A,B\),求受伤最小的方案。\(n\le 200\)

题解

dp[i][j]表示在整个大问题内将i~j的狼消灭完需要受多少伤害。
那么显然我们枚举最后一个被消灭的狼, 递归左右,则最后一匹狼的攻击为左边界 之左,右边界之右的b和它本身的a。
本质其实就是刚才的题的变化版

7.P1879

一块长方形的新牧场被划分成\(M\)\(N\)\((1 ≤ M ≤ 12,1 ≤ N ≤ 12)\),每一格都是一块正方 形的土地。\(\text{John}\)打算在牧场上的某几格里 种上美味的草,供他的奶牛们享用 遗憾的是,有些土地相当贫瘠,不能用来 种草。并且,奶牛们喜欢独占一块草地的 感觉,于是\(\text{John}\)不会选择两块相邻的土地, 也就是说,没有哪两块草地有公共边。
给你土地的贫瘠与否,一共有多少种种植 方案可供他选择?(当然,把新牧场完全 荒废也是一种方案)

题解

互不侵犯翻版?限制还是有点大的。
设f[i][j]表示处理到i行,i行的状态为j的方案个数。显然

f[i][j]+=f[i-1][k]|j,k合法且互不冲突

那么现在关键问题是多了一个土地限制怎么做?
对土地情况取反然后与状态&,为0就成立

8.P4170 [CQOI2007]涂色

每次你可以把一段连续的木版涂成一个给 定的颜色,后涂的颜色覆盖先涂的颜色。 用尽量少的涂色次数达到目标。

题解

猜测是区间dp之后就不难列状态f[i][j]为 把i~j涂成目标所花的涂色次数。
i==j则

f[i][j]=1

a[i]==a[j]则我刚开始涂的时候i和j完全可以 一起涂,即

f[i][j]=min(f[i][j-1],f[i+1][j]) 

否则底色肯定是要分开来涂的,即

f[i][j]=min(f[i][k]+f[k+1][j],f[i][j]);

课后练习

1.P1837 单人纸牌

2.P1140 相似基因

3.JSK43368

https://nanti.jisuanke.com/t/43368

\(n(n\le 20)\)个坐标,每个坐标有只宝可梦,你 在\((0,0)\),问你最少走多远可以集齐全部类 型的宝可梦(你走路只能按照曼哈顿距离 走)

2196@HDU,P1077,U53204,P1091,1651@POJ,5115@HDU,P1879,P4170,P1837,P1140

posted @ 2020-03-10 16:48  刘子闻  阅读(201)  评论(0编辑  收藏  举报