動態規劃系列二(最長有序子串行)

2021-06-19 04:13:24 字數 870 閱讀 1390

1、問題描述

乙個數的序列bi,當b1 < b2 < ... < bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列(a1, a2, ..., an),我們可以得到一些上公升的子串行(ai1, ai2, ..., aik),這裡1 <= i1 < i2 < ... < ik <= n。比如,對於序列(1, 7, 3, 5, 9, 4, 8),有它的一些上公升子串行,如(1, 7), (3, 4, 8)等等。這些子串行中最長的長度是4,比如子串行(1, 3, 5, 8).

你的任務,就是對於給定的序列,求出最長上公升子串行的長度。

2、樣例

輸入資料

輸入的第一行是序列的長度n (1 <= n <= 1000)。第二行給出序列中的n個整數,這些整數的取值範圍都在0到10000。

輸出要求

最長上公升子串行的長度。

輸入樣例

71 7 3 5 9 4 8

輸出樣例

43、原始碼

//最長有序子串行

#include"stdio.h"

#define n 50

int main()

//initialing

for(i=len-2 ; i >=0; i--)

}//from end to start 

maxlen = max[0];

for(i=0; i

if(maxlen < max[i])

maxlen = max[i];

printf("the max lenth is:%d\n", maxlen); 

return 0;

}

動態規劃(二)最長回文子串行

所說的子串行不一定是連續的,但是順序不變。子串必須是連續的字元組成。最優子結構 假設s i j 是給定的字串,長度為n,讓dp i j 表示從s i 到s j 包含的最長回文子串行的長度。初始化 dp i i 1 如果s i s j dp i j dp i 1 j 1 2 如果s i s j dp ...

動態規劃 最長回文子串行

之前並沒有想過求解 最長回文子串行 的方法,但是自己想想也是沒有什麼好的辦法可以求出 最長回文子串行 來,而最近遇到了一道題目,在經過問題分析,轉化之後,其根本的問題就是 最長回文子串行 的求解問題。題意 兩隻兔子在乙個由n個數字組成的環上,乙隻只能順時針跳,另乙隻只能逆時針跳。跳的規則如下 1 以...

動態規劃 最長公升序子串行

問題描述 乙個數的序列bi,當b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a1,a2,an 我們可以得到一些上公升的子串行 ai1,ai2,aik 這裡1 i1 i2 ik n。比如,對於序列 1,7,3,5,9,4,8 有它的一些上公升子串行,如 1,7 3,4,8 等等...