多组输入,第一个数代表有多少个数据,输入0结束。
Sample Input
3 1 3 2
4 1 2 3 4
4 3 3 2 1
0
Sample Output
4
10
3
1到3最大
1到2到3到4最大
直接到三最大
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
int a[1009],dp[1010];
int main()
{
int m,n;
while(~scanf("%d",&m)){
if(m==0) break;
memset(dp,0,sizeof dp);
for(int i=0;i<m;i++)
{
scanf("%d",&a[i]);
dp[i] = a[i];
//初始化每个点起始大小值,其值为自己本身。
}
int ans = a[0];
for(int i=0;i<m;i++){
for(int j=0;j<=i;j++){
if(a[i]>a[j])dp[i]=max(dp[i],dp[j]+a[i]);
//如果当前位置的值大于前面的值
//那就说明可以从j位置跳到i位置
//那么i位置(dp[i])就要更新一下,自己是不是当前最大值
//i位置以前的都是已经确定好的值
}
ans = max(ans,dp[i]);
}
printf("%d\n",ans);
}
return 0;
}