動態規劃初步—子串行問題,本文包括:最大連續子串行和,最大(長)上公升子串行,最大(長)公共子串行
找出一維陣列中和最大的連續子串行,狀態轉移方程如下: su
m=ma
x(a[
i]+s
um,a
[i])
; 例題:hdu 1003-max sum(最大連續子串行和)
注:此題由於要輸出和最大序列的起始位置和終止位置,形式與上列公式有所出入。但思想一致。
**示例:
#include
#include
using
namespace
std;
#define max 100005
int ar[max];
int start[max],sum[max];
int fun(int ar,int n)
else
if(sum[i]>sum[end]) end=i;
}return end;
}int main()
找出陣列中最長的嚴格公升序序列(可以不連續),狀態轉移方程如下: dp
[i]=
max(
dp[i
],dp
[j]+
1)⋅⋅
⋅ar[
j][i];
例題:poj 2533-longest ordered subsequence(最大上公升子串行)
**示例:
#include
#include
using
namespace
std;
int ar[1005],dp[1005];
int lis(int ar,int n) //最長上公升子串行長
return ans;
}int main()
兩個字串中最長的公共子串行(可以不連續),狀態轉移方程如下: dp
[i][
j]=d
p[i−
1][j
−1]+
1⋅⋅⋅
⋅⋅⋅⋅
⋅⋅⋅⋅
⋅s1[
i−1]
==s2[
j−1]
; dp
[i][
j]=m
ax(d
p[i−
1][j
],dp
[i][
j−1]
)⋅⋅⋅
s1[i
−1]!
=s2[
j−1]
; 例題:poj 1458-common subsequence(最大公共子串行)
**示例:
#include
#include
using
namespace
std;
#define max 1001
int dp[max][max];
int lcs(char s1,char s2) //最長公共子串行長
}return dp[len1][len2];
} int main()
最大連續子串行 DP動態規劃
時間限制 1 sec 記憶體限制 128 mb 提交 44 解決 20 提交 狀態 討論版 給定 k 個整數的序列 其任意連續子串行可表示為 其中1 i j k。最大連續子串行是所有連續子串行中元素和最大的乙個,例如給定序列 其最大連續子串行為 最大和為20。編寫程式得到其中最大子串行的和並輸出該子...
最大連續子串行 DP動態規劃
時間限制 1 sec 記憶體限制 128 mb 提交 44 解決 20 提交 狀態 討論版 給定 k 個整數的序列 其任意連續子串行可表示為 其中1 i j k。最大連續子串行是所有連續子串行中元素和最大的乙個,例如給定序列 其最大連續子串行為 最大和為20。編寫程式得到其中最大子串行的和並輸出該子...
最大連續子串行 DP動態規劃
時間限制 1 sec 記憶體限制 128 mb 提交 44 解決 20 提交 狀態 討論版 給定 k 個整數的序列 其任意連續子串行可表示為 其中1 i j k。最大連續子串行是所有連續子串行中元素和最大的乙個,例如給定序列 其最大連續子串行為 最大和為20。編寫程式得到其中最大子串行的和並輸出該子...