Description
给定长度为n的正整数序列a1,a2,…,an。
令sum=ab1+ab2+…+abm,并且满足:ab1<ab2<…<abm;b1<b2<…<bm;1<=m<=n。
求最大的sum。
n<=1000,0i<=109
Input
第一行,n,表示给定序列的个数。
第二行,n个用空格隔开的正整数序列。
Output
最大的sum。
Sample Input
6
2 4 1 20 5 6
Sample Output
26
最长上升子序列 开long long
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,a[1050];
long long dp[1050],ans;
while(scanf("%d",&n)!=EOF)
{
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
ans=0;
for(int i=1;i<n;i++)
{
dp[i]=a[i];
for(int j=1;j<i;j++)
{
if(a[j]<a[i])
dp[i]=max(dp[i],dp[j]+a[i]);
}
ans=max(ans,dp[i]);
}
cout<<ans<<'\n';
}
return 0;
}