最大递增子段和
注意这类问题子段是否连续,如果是连续子段只需要一重循环,如果是非连续子段则需要两重循环
//状态抓方程
if(a[i]>a[j])
dp[i]=max(dp[i],dp[j]+a[i]);
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
const int Len=1000+10;
int dp[Len];
int a[Len];
int main(){
int n;
while(cin>>n&&n){
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
dp[i]=a[i];
}
int ans=a[0];
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(a[j]>a[i]){
dp[j]=max(dp[j],dp[i]+a[j]);
ans=max(ans,dp[j]);
}
}
}
cout<<ans<<endl;
}
}