2019 ECNU XCPC March Selection 4

From EOJ Wiki
Jump to navigation Jump to search

ECNU XCPC March Selection #4

可能是 dp 专场了。

推荐资料

dp 没啥好推荐的资料。

打开 codeforces ,搜索 tag 为 dp 的,刷题。

Problem A

了解一下补题的重要性?

显然补题不只有这个作用。

要是补题还是不明显,以后可能还会这么搞。

[题解]

Problem B

Problem C

经典盒子装球问题中的一种。

可以 dp ,状态为:

$f[i][j]$ 表示 $i$ 个球放入 $j$ 个盒子的方案数。

搜索也是可以的:

$dfs(n,k,x)$ 表示将 $n$ 分成 $k$ 份,最小的一份 $\ge x$ 的方案数。

显然答案是 $dfs(m,n,0)$ 。记忆化搜索一下。

Problem D

经典大背包问题。

折半搜索。

考虑枚举 $20$ 个物品的时候的情况。

也就是把 $40$ 个物品分成两半枚举出所有情况,针对其中的一边,二分最优解的位置。

题解过于见解看不懂的。出门左转[大背包问题分析]

Problem E

感觉也是比较基本的 dp 。

看到数都不是很大,于是我们考虑从这点入手设计状态。

$f[i][j]$ 表示从第 $i$ 位开始,消成 $j$ 所需要的位置数量(显然,一定是连续的一段)。

考虑状态转移,如果 $f[i][j-1]>0$ 而且 $f[i+f[i][j-1]][j-1]>0$ ,也就是出现了两段消完以后连续的两个数一样,那么可以继续消,也就是 $f[i][j]=f[i+f[i][j-1]][j-1]+f[i][j-1]$ 。

Problem F