您的位置:首页 > 其它

DP————1003

2016-05-14 10:48 225 查看
题目:Super Jumping

题意:一个棋盘和一些旗子,棋子有大小的整数数字或者开始或者结束,在整个过程中不能后退,且整数比递                              增,求最大数和

思路:类似最大递增子段,只不过这里求的是到第i个元素时,其最大递增子段的和dp[i]。输出最大的那个值k。

感想:sum[j]=max{sum[i]}+a[j]; 其中,0<=i<=j,a[i]<a[j]

代码:

#include<string.h>

#include<stdio.h>

#include<algorithm>

#include<iostream>

#include<cstdio>

using namespace std;

int main()

{

    int a[10005];

    int dp[10005];

    int n,i,j,k,s;

    while(cin>>n&&n!=0)

    {

        memset(dp,0,sizeof(dp));

        for(i=1;i<=n;i++)

            scanf("%d",&a[i]);

        for(i=1;i<=n;i++)

        {

            s=-32768;

            for(j=0;j<i;j++)

            {

                if(a[i]>a[j])

                {

                    s=max(s,dp[j]);

                }

            }

            dp[i]=s+a[i];

        }

        int k=-32768;

        for(i=1;i<=n;i++)

        {

            if(dp[i]>k ) k=dp[i];

        }

        cout<<k<<endl;

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: