动态规划经典题目整理

动态规划经典题目整理

  • 背包问题
  • 最长公共子串问题
  • 连续数组最大和问题
  • 持续增加中。。。。

背包问题

复杂度 o(nW)
n为物品种类,W是背包的重量

单副本背包问题:
K ( w , j ) = m a x { K ( w − w j , j − 1 ) + v j , K ( w , j − 1 ) } K(w,j)=max\{K(w-w_j,j-1)+v_j,K(w,j-1)\} K(w,j)=max{K(wwj,j1)+vj,K(w,j1)}

K(w,j)代表背包重量为W,有j件物品时候的最大价值

多副本背包问题:
K ( w ) = m a x { K ( w − w i ) + v i : w i < = w } K(w)=max\{K(w-w_i)+v_i:w_i<=w\} K(w)=max{K(wwi)+vi:wi<=w}

最长公共子串问题

博客入口
设有s[m],和t[n]两个字符串,要找他们最长的公共子串
设置一个变量 long=0;
c(i,j)=s[i]==s[j]?c(i-1,j-1)+1:0
每次如果c(i,j)>long那么long=c(i,j)

设两个子序列的长度分别为m,n
那么时间复杂度就为O(mn)

连续数组最大和问题

给定一个数组如{ -2,11,-4,13,-5,-2 }
最大和为 i=2,j=4的时候 11-4+13=20
算法:

int sum=0, b=0;

for(int i=1;i<=n;++i){
	if(b>0){
		b+=a[i];
	}
	else{
		b=a[i]
	}
	if(b>sum)
		sum=b;
}
return sum;

O(n)

持续增加中。。。。

你可能感兴趣的:(动态规划)