/*
http://acm.hdu.edu.cn/showproblem.php?pid=1087
HDU 1087 Super Jumping! Jumping! Jumping!
状态转移方程为:sum[i] = { max(sum[j] + num[i]) , 1 <= j < i } ;
*/
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;
#define CLR(c,v) (memset(c,v,sizeof(c)))
const int INF = 1<<30;
const int inf = -(1<<30);
const int M = 1e4 + 10;
int seq[M];
int sum[M]; // 100 000 * 4 byte
int MaxValue(int s[],int len){
int max = inf;
sum[0] = s[0];
for (int i = 1 ; i < len ; i++){
sum[i] = s[i];
for (int j = 0 ; j < i ; j++){
if (s[j] < s[i] && sum[i] < s[i] + sum[j]){
sum[i] = s[i] + sum[j];
}
}
}
for (int i = 0 ; i < len ; i ++){
if(max < sum[i]){
max = sum[i];
}
}
return max;
}
int main(){
int n;
while(cin >> n && n){
CLR(sum,0);CLR(seq,0);
for (int i = 0 ; i < n ; i++){
scanf("%d",&seq[i]);
}
cout << MaxValue(seq,n) << endl ;
}
return 0;
}
HDU 1087 Super Jumping! Jumping! Jumping! -- 简单动态规划
最新推荐文章于 2022-11-17 19:01:23 发布