对应的状态转移方程为:
dp[ i ] = max (arr[ i ], dp[ j ] + arr[ i ] | j < i && arr[ j ] < arr[ i ])
#include<iostream>
#include<cstdio>
using namespace std;
const int N = 1000 + 10;
int main(){
int n, arr[N], dp[N];
while(scanf("%d", &n) != EOF){
for(int i = 0; i < n; i++) scanf("%d", &arr[i]);
int maximum = 0;
for(int i = 0; i < n; i++){
dp[i] = arr[i];
for(int j = 0; j < i; j++){
if(arr[j] < arr[i]){
dp[i] = max(dp[i], dp[j] + arr[i]);
}
}
maximum = max(maximum, dp[i]);
}
printf("%d\n", maximum);
}
return 0;
}