#include <bits/stdc++.h>
using namespace std;
int main() {
int n;cin>>n;
int arr[n],dp[n];
for(int i =0;i<n;i++)
dp[i]=0;
for(int i =0;i<n;i++)
cin>>arr[i];
dp[0] = arr[0];
for(int i =1;i<n;i++){
//找他之前的元素,找到比他小且dp最大的值
int maxDp=-1;
bool isFind=false;
for(int j=0;j<i;j++)
if(dp[j]>maxDp&&arr[j]<arr[i]){
maxDp=dp[j];
isFind=true;
}
//加上该元素
if(isFind)dp[i] = arr[i]+maxDp;
else dp[i]=arr[i];
}
cout<<*max_element(dp,dp+n);
}
// 64 位输出请用 printf("%lld")
二重for循环,O(n^2)

京公网安备 11010502036488号