最大上公升子串行和 簡單動態規劃

2021-10-19 11:33:36 字數 959 閱讀 1989

乙個數的序列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)等等。這些子串行中序列和最大為18,為子串行(1, 3, 5, 9)的和. 你的任務,就是對於給定的序列,求出最大上公升子串行和。注意,最長的上公升子串行的和不一定是最大的,比如序列(100, 1, 2, 3)的最大上公升子串行和為100,而最長上公升子串行為(1, 2, 3)。

輸入包含多組測試資料。

每組測試資料由兩行組成。第一行是序列的長度n (1 <= n <= 1000)。第二行給出序列中的n個整數,這些整數的取值範圍都在0到10000(可能重複)。

對於每組測試資料,輸出輸出其最大上公升子串行和。

設乙個序列b有n個數,dp[i]存放的對應第i個數及其之前的最大上公升子串行和。比如:100,1,2,3   dp[0]=100, dp[1]=1, dp[2]=3, dp[3]=6;

把dp[i]的初始值設為序列第i個數的值,上述序列dp[i]的初始值為dp[0]=100, dp[1]=1, dp[2]=2, dp[3]=3;

在dp的初始值的基礎上,從前往後遍歷,上述序列中遍歷到3, ,1在3之前並且1小於3,那麼dp[3]=dp[1]+b[3],在遍歷到2時,dp[3]=dp[2]+b[3];

#include using namespace std;

typedef long long ll;

int main()

}ll ans = -1;

for(int i=0; ians = max(ans,dp[i]);

cout<}

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 等等。這些子串...

動態規劃 求最大上公升子串行

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

最大上公升子串行(動態規劃)

最大上公升子串行 動態規劃 s 給定陣列,輸出陣列的最大上公升子串行。輸入 兩行測試資料 第一行代表陣列元素個數 第二行輸入陣列中的整數 輸出 輸出最大上公升子串行的長度 輸入樣例 81 3 4 2 7 9 6 8 輸出樣例 5 一和 二思路一樣,都是從陣列的第i 1 i n 位置開始尋找最大上公升...