是一个O(N²)的dp
具体见代码,注意要用long long
#include<bits/stdc++.h>
#define int long long
using namespace std;
int res[1010];
int A[1010];
signed main() {
int n;
while (scanf("%lld", &n) && n != 0) {
memset(res, 0, sizeof(res));
memset(A, 0, sizeof(A));
for (int i = 0;i < n;i++) {
scanf("%lld", &A[i]);
res[i] = A[i];
}
for (int i = 0;i < n;i++) {
for (int j = 0;j < i;j++) {
if (A[j] < A[i]) {
res[i] = max(res[i], res[j] + A[i]);
}
}
}
int ans = -1;
for (int i = 0;i < n;i++) {
ans = max(ans, res[i]);
}
printf("%lld\n", ans);
}
}