Super Jumping! Jumping! Jumping!

搬中文ing

Descriptions:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

wsw成功的在zzq的帮助下获得了与小姐姐约会的机会,同时也不用担心wls会发现了,可是如何选择和哪些小姐姐约会呢?wsw希望自己可以循序渐进,同时希望挑战自己的极限,我们假定每个小姐姐有一个“攻略难度值” 从攻略成功第一个小姐姐开始,wsw希望每下一个需要攻略的小姐姐难度更高,同时又希望攻略难度值之和最大,好了,现在小姐姐们排成一排,wsw只能从左往右开始攻略,请你帮助他找到最大的攻略难度和

Input

多组输入,每组数据占一行,每行一个整数n表示小姐姐个数,接着n个数a_1, a_2, ..., a_n表示第i个的小姐姐攻略难度 (a_i在32位有符号整型范围内),n = 0表示输入结束 (0 <= n <= 1000)。

Output

一个数,最大攻略和

Sample Input

3 1 3 2
4 1 2 3 4
4 3 3 2 1
0

Sample Output

4
10
3

题目链接

https://vjudge.net/problem/HDU-1087

 

求解最大递增子序列和 不要求是连续的最大递增子序列。但是一定要注意是递增的

dp[i]表示的是前i个并且包含第i个的最大递增子序列和

若a[i]>a[j]  dp[i]=dp[j]+a[i]

开两个for循环全部遍历一遍即可

 

AC代码

 

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#define Mod 1000000007
#define eps 1e-6
#define ll long long
#define INF 0x3f3f3f3f
#define MEM(x, y) memset(x, y, sizeof(x))
#define Maxn 1000+10
using namespace std;
int n;
int dp[Maxn];
int a[Maxn];
int main()
{
    while(cin>>n&&n!=0)
    {
        MEM(dp,0);//初始化
        MEM(a,0);
        for(int i=0;i<n;i++)
            cin>>a[i];
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<=i;j++)
            {
                if(a[i]>a[j])
                    dp[i]=max(dp[i],dp[j]+a[i]);
            }
            dp[i]=max(dp[i],a[i]);
        }
        sort(dp,dp+n);
        cout<<dp[n-1]<<endl;
    }
    return 0;
}

 

 

   
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄