21st 2022/7/18 动态规划大专题

这个专题

着实需要动脑,推转移方程,方程的复杂度,还有优化之处

普通DP

根据题目进行推测

设立状态,然后转移,如:最长不下降子序列

当然,某些题也不会直接是DP板子,而是有些思路

这些DP,之所以归纳为普通,是因为它们都一般是直接for循环有序地DP,不像。。。

背包DP

这个DP归纳出来是因为特殊

背包空间为n,m个物品,每个占空间wi,价值vi,求最大价值

就是那仨板子:

01背包

每个物品只有一个

从后往前转移,因为只能取一个,防止重复

	for(int i=1;i<=m;i++){
		for(int j=n;j>=w[i];j--){
			f[j]=max(f[j],f[j-w[i]]+v[i]);
		}
	}
完全背包

每个物品无穷个

所以随便重复用,不用放置,从前往后

	for(int i=1;i<=m;i++){
		for(int j=w[i];j<=n;j++){
			f[j]=max(f[j],f[j-w[i]]+v[i]);
		}
	}
多重背包

每个物品限定个数

就是对于一个物品进行ki次01背包

然后有一个优化,就是讲一个ki个的物品拆成几个wi×a+vi×a的物品(a为2^?),按二进制拆,这样一定有ki个的效果,再跑一遍01背包就行,时间复杂度->log

当然还有单调队列优化

树形背包

就是选了父亲才能选儿子

待补

树形DP

建立在树上,父亲通过儿子转移,巧妙

区间DP

从小区间到大区间的顺序DP,巧妙解决无法转移区间的问题

状压DP

讲一行或一列数压缩进一个数里,有效节省空间和时间

概率DP

对于概率问题的DP,一般设当前状态+解

数位DP

将数拆分成一个个位,然后对于相同的转移部分一次性转移

计数DP

?

插头DP

轮廓线

动态DP

DP优化

单调队列

就是保留有用的,去掉失去作用的

单调栈

斜率优化

推式子

总结

此专题浩若星海,暂不可窥,待修为长进,再做耕耘

posted @   Far_delivery  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示