AcWing 1016 最大上公升子串行和

2021-10-02 07:49:21 字數 905 閱讀 6655

題目描述:

乙個數的序列 bi,當 b1對於給定的乙個序列(a1,a2,…,an),我們可以得到一些上公升的子串行(ai1,ai2,…,aik),這裡1≤i1比如,對於序列(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。

第二行給出序列中的n個整數,這些整數的取值範圍都在0到10000(可能重複)。

輸出格式

輸出乙個整數,表示最大上公升子串行和。

資料範圍

1≤n≤1000

輸入樣例:

7

1 7 3 5 9 4 8

輸出樣例:

18
分析:

在lis問題中,f[i]表示以a[i]為末尾的最長上公升子串行長度,f[i] = max(f[i],f[j] + 1),j < i,a[i] > a[j]。而本題是要求所有上公升子串行中子序列和的最大值。故狀態表示:f[i]表示以a[i]為末尾的最大的上公升子串行和。狀態轉移方程為f[i] = (f[i],f[j] + a[i]),j < i,a[i] > a[j]。最後遍歷下f[i]求出最大值即可。

#include #include using namespace std;

const int maxn = 1005;

int n;

int a[maxn], f[maxn];

int main()

最大上公升子串行

int lis int arr,int idx,int upper 初始化為上乙個idx上界為upper int ans lis arr,idx 1,upper if arr idx upper 如果可以,調整上界 ans max ans,lis arr,idx 1,arr idx 1 return...

Stock Exchange 最大上公升子子串

1 2 題意 3 給定l個整數a1,a2,an,按照從左到右的順序選出盡量多的整數,4組成乙個上公升序列 子串行可以理解為 刪除0個或者多個數,其他的數的吮吸不變 5例如,1,6,2,3,7,5,可以選出上公升子串行1,2,3,5,也可以選出1,6,7,6但前者更長,選出的上公升子串行中相鄰元素不能...

最大上公升子串行和

3532 最大上公升子串行和 檢視 提交 統計 提問 總時間限制 1000ms 記憶體限制 65536kb 描述 乙個數的序列bi,當b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a1,a2,an 我們可以得到一些上公升的子串行 ai1,ai2,aik 這裡1 i1 i2 i...