您的位置:首页 > 其它

ZOJ 1087 Super Jumping! Jumping! Jumping!(简单DP)

2013-04-21 23:02 543 查看
方程:f[i]=max(f[j])+a[i](a[i]>a[j]&&0<=j<i)

答案是最大的f[i]

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=1010;

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