和最长上升子序列思路一样,dp数组记录和
code:
#include<bits/stdc++.h>
#define ms(a) memset(a,sizeof(a),0)
using namespace std;
const int maxn = 1e6+50;
int a[maxn],dp[maxn];
int n;
void solve(){
for(int i=0;i<n;i++){
dp[i]=a[i];
for(int j=0;j<i;j++){
if(a[j]<a[i] && dp[j]+a[i] > dp[i]){
dp[i]=dp[j]+a[i];
}
}
}
}
int main(){
while(cin>>n,n){
ms(a);ms(dp);
for(int i=0;i<n;i++){
cin>>a[i];
}
solve();
int ans=0;
for(int i=0;i<n;i++){
ans=max(ans,dp[i]);
}
cout<<ans<<endl;
}
return 0;
}