传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1087
题意:
上升子序列的最大和.
因为有 hdu1078 的基础, 很快就 a 掉了…思路:
dp[i] = max(dp[arival(i)] + arry[i]);
ans = max(dp[i]);
#include <stdio.h>
#include <iostream>
#include <cstring>
using namespace std;
const int MAX = 1111;
const int INF = 1 << 31 - 1;
int n, ans, ary[MAX], dp[MAX];
int max(int a, int b) {
return a > b ? a : b;
}
int judge() {
ans = -INF;
for (int i = 1; i <= n; ++i)
dp[i] = ary[i];
for (int i = 0; i <= n; ++i) {
for (int j = i+1; j <= n; ++j) {
if (ary[j] <= ary[i])
continue;
dp[j] = max(dp[i] + ary[j], dp[j]);
ans = max(ans, dp[j]);
}
}
return ans;
}
int main() {
while (cin >> n && n) {
for (int i = 1; i <= n; ++i)
cin >> ary[i];
cout << judge() << endl;
}
return 0;
}
2017-10-13