做题感悟:这题跟上一题都看了很久,没有忍住百度了一下,然后~~
解题思路:动态方程 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 ; }