關於動態規劃中最長上公升子串行和最大上公升子串行總結

2021-08-22 13:14:14 字數 1159 閱讀 1419

今天將詳解一下最長上公升子串行和最大上公升子串行這種題,實際上兩種題考的是一種題,最大上公升子串行只是

稍微改動的最長上公升子串行。

還是一樣我先給出做題樣例和模板。

一.樣例

《 超級跳躍》 是一款非常簡單的小遊戲,它的規則是這樣的:

a. 遊戲賽道被分為了 n 塊區域,每塊區域具有乙個價值 ki;

b. 玩家起始站在道路的起點處,當參與者到達終點處時遊戲結束;

c. 玩家每次可以選擇使用超級跳躍到達前方的任意區域,但到達的區域

必須滿足以下兩個條件之一: ① 到達的區域是終點; ② 到達的區域

的價值大於當前所在的區域價值。

d. 玩家每到達乙個區域,就獲得這塊區域的價值。

e. 不可以使用超級跳躍向身後跳。

請你編寫乙個程式,算出對於一條《 超級跳躍》 遊戲的賽道,玩家最多可以

獲得多少價值。

輸入 輸入的資料有多組, 每組資料首先是乙個正整數 n (0 ≤ n ≤ 1000), 代表

賽道被分為 n 塊區域,接下來是 n 個以空格為分隔符的數字 k1, k2 … kn

(−231 ≤ ?? ≤ 231 − 1),代表 n 塊區域的價值。每組資料佔一行。

若 n 為 0,則表示輸入結束,該組資料不輸出任何內容。

輸出 對於每組資料,在一行內輸出乙個正整數,表示遊戲中可獲得的最大價值。

樣例輸入

3 1 3 2

4 1 2 3 4

4 3 3 2 1

0 樣例輸出

4 10

3二.模板

#include

#include

int main(void)

}max[j]=caca+1; //最長子序列長度加上1為新的最長長度

//max[j]=caca+num[j]; //最大子串行和加上自己為新的最大子串行和

}int ha=max[0];

for(int i=1;iif(max[i]>ha)

ha=max[i];

}printf("%d\n",ha); //找到最大的列印出來,無論是最長長度還是和都如此

return

0;}

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

問題描述 乙個數的序列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 等等...

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

動態規劃 儲存遞迴中間結果,減少遞迴次數 總時間限制 2000ms 記憶體限制 65536kb 描述 乙個數的序列 bi,當 b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a1,a2 an 我們可以得到一些上公升的子串行 ai1,ai2 aik 這裡1 i1 i2 ik n。...

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

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