Super Jumping! Jumping! Jumping!
#include<iostream>
#include<iomanip>
#include<string.h>
#include<stdio.h>
using namespace std;
//动态规划,计算每个位置的最大升序不连续序列和。
//睇了很久想了很久才想明白,还要感谢网友的代码,要不是看了很多网友的代码才真正理清楚。
//动态规划真的很神奇,师兄说得对,即使做完那46题DP才是刚入门,继续努力。
int main( )
{
long long a[1010],b[1010],c,max;//a数组储存数字,b数组储存当前位置的最大升序不连续序列和
int N,i,j;
while(cin>>N,N!=0)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));//初始化数组a,b。
for(i=1;i<=N;++i)
{
cin>>a[i];
}
max=0;//最大的升序不连续序列的和。
for(i=1;i<=N;++i)
{
c=0;//当前位置前面的最大升序不连续序列的和。
for(j=1;j<i;++j)
{
if(b[j]>c&&a[j]<a[i])
{
c=b[j];
}
}
b[i]=a[i]+c;//当前位置的最大升序不连续序列的和。
if(b[i]>max)
max=b[i];//找出最大值。
}
cout<<max<<endl;
}
return 0;
}