做DP题的一些总结(自用,勿看,如果你没做过这些题,会影响做题质量)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Fantasy_World/article/details/81516220

1.统计单词个数
https://www.luogu.org/problemnew/show/P1026
DP的过程实际上就是拼凑最优解的过程,因此,可以先想想最优方案是如何构成的,然后对最优方案进行优美地分解,使得其可以转移,(分解可以是一行一列一段一层(树上)!),比如这题我一开始状态设对了。。。但是因为太弱,没能想出来一段一段转移,而是考虑一个一个字符转移。看来做不出时就要拓展思路,拓展做题的方式,把1变为多 把多变为1这样子。。。
并且要多画画图。。。我在纸上画了几个“子段后”豁然开朗
这里写图片描述
2.绿豆蛙的归宿
注意公式中的+= 有这个符号要注意别让某个点重复dfs了多次。。。事实上期望是倒推,算出f[x]之后以另外一种方式到达x时不要再从x出发了,不然这怎么叫倒推呢,所谓的倒推,递归回来的时候,一个点把他的每条出边都来一遍就返回
事实上更普遍的是应该拓扑一遍,可以反向建图,然后方程是fv = fx/out(x) out出边
3.矩阵取数游戏
重叠子问题 其实也就是某些东西在过程中单调变化
发现区间是单调缩短的,则f[x][y]表示区间缩到x,y时的最大值

次小/大值是很有用的,有时候DP转移会受到限制,最大值可能无法转移过去,这个时候就可以调用次大值,一种最大值无法转移的情况的最优解难道不是用次大值去转移过去吗?

猜你喜欢

转载自blog.csdn.net/Fantasy_World/article/details/81516220