HDU 1087 Super Jumping! Jumping! Jumping!

题目链接~~>

做题感悟:这题跟上一题都看了很久,没有忍住百度了一下,然后~~

解题思路:动态方程      F[ i ] = max{ g[ i ] , F[ j ] ( 0<=j<i ) } .

代码:

#include<stdio.h>
#include<iostream>
#include<map>
#include<string>
#include<string.h>
#include<stdlib.h>
#include<queue>
#include<algorithm>
using namespace std ;
const int MX = 300005 ;
int g[1005],b[1005] ;
int main()
{
    int n ;
    while(~scanf("%d",&n)&&n)
    {
        for(int i=0 ;i<n ;i++)
           scanf("%d",&g[i]) ;
        int best=0 ;
        b[0]=g[0] ;
        for(int i=1 ;i<n ;i++)
        {
            int mx=g[i] ;
            for(int j=0 ;j<i ;j++)
              if(g[j]<g[i]&&b[j]+g[i]>mx)
                     mx=b[j]+g[i] ;
             b[i]=mx ;
             best = best > mx ? best : mx ;
        }
        printf("%d\n",best) ;
    }
    return 0 ;
}


 

 

你可能感兴趣的:(HDU 1087 Super Jumping! Jumping! Jumping!)