网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > Verilog >

DP学习总结

时间:2024-11-17 20:46

人气:

作者:admin

标签:

导读:动态规划是一种通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。 OI Wiki 例.1-最大子段和 分析 DP四步 ⑴定义状态 定义\(dp_i\)表示以\(i\)结尾的最大子段和 ⑵分析答案...

动态规划是一种通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。 -----OI Wiki

例.1-最大子段和

分析

DP四步

⑴定义状态

定义\(dp_i\)表示以\(i\)结尾的最大子段和

⑵分析答案

答案即\({\max}^{i\in[1,n]}_{dp_i}\)

⑶分析方程

对于每个\(i\)

  1. 可以与\([1,i-1]\)的最大子段和拼接,组成新的子段和\((dp_{i-1}+a_i)\)
  2. 可以自己单独成一个子段和\(a_i\)

\(\max\)

⑷边界条件

\(dp_1\)\(a_1\)

代码实现

递归写法

定义\(f(i)\)为以\(i\)结尾的最大子段和
则递归分析即可

int f(int x){
	if(x==1){//边界条件
		return a[1];
	}
	return max(f(x-1)+a[x],a[x]);//求最大值
、}

这样时间很慢,原因是存在许多已经算过的节点被重复计算
所以用一个\(val\)记录计算过的节点信息

for(int i=1;i<=n;i++){
	dp[i]=inf;
}
int f(int x){
	if(dp[x]!=inf){
		return dp[x];//已经记录过的节点信息
	}
	if(x==1){//边界条件
		return a[1];
	}
	dp[x]=max(f(x-1)+a[x],a[x]);//求最大值
	return dp[x];
}

上述优化方法即记忆化搜索,是一种基本DP方法

记忆化搜索是一种通过记录已经遍历过的状态的信息,从而避免对同一状态重复遍历的搜索实现方式。 ------OI Wiki

转成递推形式就成了基本的线性DP

dp[1]=a[1];
for(int i=2;i<=n;i++){
	dp[i]=max(dp[i-1]+a[i],a[i]);
	maxi=max(maxi,dp[i]);
}

例.2-最长上升子序列(LIS)

分析

DP四步

⑴定义状态

定义\(dp_i\)表示以\(i\)结尾的最长上升子序列长度

⑵分析答案

答案即\({\max}^{i\in[1,n]}_{dp_i}\)

⑶分析方程

对于每个\(i\),有若干\(j<i\)\(a_j<a_i\)

  1. 可以与每一个\(j\)的最长上升子序列拼接,组成新的子序列长度\((dp_{j}+1)\)
  2. 可以自己单独成一个子段和\(1\)

\(\max\)

⑷边界条件

\(dp_i\)\(1\),因为每个\(dp\)值至少为\(1\)

代码实现

使用递推,枚举\(i\),并且枚举\(j(j<i)\)

for(int i=1;i<=n;i++){
	dp[i]=1;
	for(int j=1;j<i;j++){
		if(a[j]<a[i]){
			dp[i]=max(dp[j]+1,dp[i]);
		}
	}
	maxi=max(maxi,dp[i]);
}

重点题-导弹拦截

50分做法

第一小问即求最长不上升子序列长度
第二问可以用Dilworth 定理解决
把序列分成不上升子序列的最少个数,等于序列的最长上升子序列长度。把序列分成不降子序列的最少个数,等于序列的最长下降子序列长度。
所以第二问等价于求最长上升子序列长度

100分做法

使用贪心优化如果,如果一个位置可以有\(2,3\)两个数选一个数,我们一定会选\(2\),因为选2后面就有更多的机会拼接。
定义一个\(c\)数组存贮已经选了的数
只要每次二分查找第一个能够等价替换的数,就能将其替换,在过程中记录DP即可。

具体代码

补充

DP的要素:

  1. 数据范围较小
  2. 可以拆解为多个子问题

本人(KK_SpongeBob)蒟蒻,写不出好文章,但转载请注明原文链接:https://www.cnblogs.com/OIer-QAQ/p/18551071/study_DP

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信