#include <algorithm>
#include <iostream>
using namespace std;
const int N = 1005;
int dp[N],A[N];
int main() {
int n;
while (cin >> n) { // 注意 while 处理多个 case
for(int i = 1;i<=n;i++)cin>>A[i];
for(int i = 1;i<=n;i++){
dp[i]=A[i];
for(int j=1;j<i;j++){
if(A[j]<A[i])dp[i]=max(dp[i],dp[j]+A[i]);
}
}
sort(dp+1, dp+1+n);
cout<<dp[n]<<endl;
}
}
// 64 位输出请用 printf("%lld")
思路:动态规划
状态转移方程:
if(A[j]<A[i])dp[i]=max(dp[i],dp[j]+A[i]);

京公网安备 11010502036488号