2017 UESTC Training for Dynamic Programming

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2017 UESTC Training for Dynamic Programming相关的知识,希望对你有一定的参考价值。

昨天做完。补一下题解

A:规律题。。

 

B:状压dp

 

C:4^n - (没有连续4个不相同的串的个数),后者可以这样求,一个朴素的dp就是dp[i][j]表示到第i位,尾部有j个不同。

dp[i][j] = (4 - j) * dp[i-1][j-1] + dp[i-1][j + 1] + dp[i-1][j + 2]...+dp[i-1][3]..大概就是这样吧。然后用矩阵优化一下,递推方程的意思是这样的,

当后面假设当前第i-1位的后几位是这样的....xy,也就是dp[i-1][2],在后面可以加一个不同xy的,也可以加一位和这里相同的。那就变成了不同的,矩阵就很好构造了

 

D:做一次01背包再做一次完全背包

 

E:简单概率dp,dp[i][j]表示目前离起点i公里,在第j道的概率。可以滚动优化掉一维空间

 

F:简单dp,dp[i][j]表示在点(i,j)时所获得最大价值,注意不越界,把矩阵整体移动两格就好处理了,注意当dp[i][j]小于0时不能进行转移

 

G:先按nlogn的lis做一次,dp[i]表示长度为i的最长上升子序列结尾的最小那个数,并且记录每个数作为的最后一个长度,然后倒着从dp[len]开始找,记录输出路径

 

H:先从四个方向做一次dp,左上右上左下右下分别做一次对角的dp,题目有个关键,那就是路径只有一个交点,显然我们可以枚举这个交点,然后两个专家的路径相交于这个点的就只有两种可能。这个自己画一下图就知道。这样就做完了。

 

I:考虑一个贪心一样的东西就是相邻的都会凑起来,再考虑这是一个区间dp,dp[i][j] = min (dp[i][k] + dp[k + 1][j] + C),这个花费我们可以自己推出来,但是这是个n^3,显然不能通过n = 1e3。。四边形优化证明大概那些我也不会,但是区间dp的东西,要优化也只能这个了,于是直接上四边形优化就过了。

 

J:有向图博弈,cf原题了,dp[i][j]表示第i个人在j点的胜负情况,初始化必败点,然后倒着走,如果该点为必败点,那它的前继点必然是必胜点,如果该点是到达必胜点的次数为这个人集合中的数的总数,那它是必败点,否则就是死循环点了。

 

K:推一下就发现是傻逼斜率dp

 

L:状压dp/轮廓线dp

 

M:多重背包

 

N:完全背包

以上是关于2017 UESTC Training for Dynamic Programming的主要内容,如果未能解决你的问题,请参考以下文章

2017 UESTC Training for Data Structures

2017 UESTC Training for Dynamic Programming

2017 UESTC Training for Graph Theory

2017 UESTC Training for Dynamic Programming

2017 UESTC Training for Graph Theory

2018 UESTC Training for Search Algorithm & String