您的位置:首页 > 其它

HDU 1087 Super Jumping! Jumping! Jumping!

2017-03-23 08:47 351 查看
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1087





解题思路:

这是单最长调递增子序列的一个变形

d[i]:表示以a[i]结尾的序列和的最大值。

因此定义下面的状态方程:

在初始以d[i]结尾的序列只有a[i]一个,因此d[i]=a[i].



实现代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const int MAXN=2005;
const int INF=1<<20;
int End,n;
int a[MAXN];
int dp[MAXN];

/******************************************
dp[i]:表示以a【i】结尾,单调递增序列和的最大值
******************************************/
void solve(){

int res=-INF;
for(int i=0;i<n;i++){
dp[i]=a[i];
for(int j=0;j<i;j++){
if(a[j]<a[i])
dp[i]=max(dp[i],dp[j]+a[i]);
}
res=max(dp[i],res);
}
cout<<res<<endl;
}

int main(){
while(scanf("%d",&n)!=EOF&&n){
for(int i=0;i<n;i++)
scanf("%lld",&a[i]);
solve();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: