5.A - Super Jumping! Jumping! Jumping!

题目连接:http://acm.hust.edu.cn/vjudge/contest/126708#problem/A

题目是求最大的上升子序列。代码思路很清晰。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int d[1005];//一共有n个数,d[i]其实表示从i到n的最大的递增序列的和
int a[1005];//装初值
int main()
{
    int n;
    while(scanf("%d",&n)&&n!=0)
    {
        memset(d,0,sizeof(d));
        memset(a,0,sizeof(a));
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            d[i]=a[i];
        }
        for(int i=n-1;i>=1;i--)//从n-1开始
         {
             int max=0;
             for(int j=i+1;j<=n;j++)
             {
                 if(a[j]>a[i])//满足递增,后面的数要大于前面的数
                 {
                     if(max<d[j]) max=d[j];//找到i后面的最大的递增序列
                 }
             }
             d[i]+=max;
         }
         int max=0;
         for(int i=1;i<=n;i++)
         {
             if(max<d[i]) max=d[i];
         }
         printf("%d\n",max);
    }
     return 0;
}

 

posted @ 2016-08-09 20:01  Twsc  阅读(118)  评论(0编辑  收藏  举报