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