您的位置:首页 > 其它

HDU 1087 Super Jumping! Jumping! Jumping!

2014-05-05 17:53 260 查看
动态规划

最大递增子段和

状态转移方程 dp[i]=max(dp[j])+v[i] 0<=j<=i 且v[j]<v[i]

#include<bits/stdc++>
using namespace std;
long long v[1020],dp[1020];
int main()
{
int N;
while(scanf("%d",&N)==1&&N)
{
memset(dp,0,sizeof(dp));
for(int i=1;i<=N;i++)
scanf("%I64d",&v[i]);
for(int i=1;i<=N;i++)
{
long long maxv=0;
for(int j=0;j<=i-1;j++)
{
if(v[j]<v[i]&&dp[j]>maxv)
maxv=dp[j];
}
dp[i]=maxv+v[i];
}
long long ans=0;
for(int i=1;i<=N;i++)
{
if(dp[i]>ans)
ans=dp[i];
}
printf("%I64d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: