SDNU 1330.Max Sum(最大子序列和)

Description

给定长度为n的正整数序列a1,a2,…,an

令sum=ab1+ab2+…+abm,并且满足:ab1<ab2<…<abm;b1<b2<…<bm;1<=m<=n。

 

求最大的sum。

n<=1000,0<ai<=109

Input

第一行,n,表示给定序列的个数。

第二行,n个用空格隔开的正整数序列。

Output

最大的sum。

Sample Input

6
2 4 1 20 5 6

Sample Output

26
思路:这道题的思路和最长上升子序列一样,但是需要稍加改动。排序的时候一直没把int改为ll,一直wa,好难过。
复制代码
#include <cstdio>
#include <iostream>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
#include <map>
using namespace std;
#define ll long long

const int inf = 0x3f3f3f3f;
const int mod = 1e9+7;

int n, num[1000+8];
ll dp[1000+8];

int main()
{
    scanf("%d", &n);
    for(int i = 0; i<n; i++)
    {
        scanf("%d", &num[i]);
        dp[i] = num[i];
    }
    for(int i = 0; i<n; i++)
        for(int j = 0; j<i; j++)
            if(num[i]>num[j] && dp[j]+num[i]>dp[i])dp[i] = dp[j]+num[i];
    sort(dp, dp+n, greater<ll>());
    printf("%lld\n", dp[0]);
    return 0;
}
复制代码

 

posted @   明霞  阅读(231)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示