給一串資料i0
1234
5678
num[i]14
7258
369
來得到其對應位上的資料的最長有序子串行的長度l;i0
1234
5678
num[i]14
7258
369f[i]12
3234
345
這是個經典的dp問題。
在這裡我們利用f[i]的陣列;
來儲存其之前資料的最長有序子串行
進而得到後面的。
/*最長有序子串行*/
#includeusing namespace std;
int main()
; int f[9];
for(int i=0;i<=8;i++)
for(int i=0;i<=8;i++)
{ cout<
剛開始寫成了
if(num[j]f[i]=f[j]+1;
後來發現這樣只計算了對應位置前面小於該值的數目。並沒有計算出最長有序子串行。
因此當f[i]小於f[j]+1後才進行更新能保留住前面的最長有序子串行的值。
最長上公升子串行,經典
class solution def lengthoflis self,nums list int int 方法一,動態規劃 ifnot nums return 0 dp 1 len nums dp以0位結尾的,最長上公升子串行長度為1 for i in range 1 len nums for j...
經典Dp 單調遞增最長子序列 經典dp
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 求乙個字串的最長遞增子串行的長度 如 dabdbf最長遞增子串行就是abdf,長度為4 輸入第一行乙個整數0 輸出輸出字串的最長遞增子串行的長度 樣例輸入 3 aaaababc abklmncdefg 樣例輸出 1 37 inc...
POJ1458 最長公共子串行 經典DP
題目不說了,學習dp時候經典的例子。如果現在有兩個序列x 和y 他們的lcs是z 下面分兩種情況討論 1 如果xm yn,那麼一定有zk xm yn,即xm與yn相等時他們一定是lcs結尾的那個元素。lcs x,y lcs x y xm。2 如果xm yn,那麼zk xm 和zk yn至少有乙個成立...