很基础的dp,max_val[i]表示以x[i]结尾的子序列中最长上升子列和
#include <iostream>
#include <algorithm>
using namespace std;
int main(void)
{
ios::sync_with_stdio(false);
int x[1001], max_val[1001];
int n;
while (cin >> n)
{
if (n == 0)
return 0;
for (int i = 0; i != n; ++i)
{
cin >> x[i];
max_val[i] = x[i];
}
for (int i = 1; i != n; ++i)
for (int j = 0; j != i; ++j)
if (x[i] > x[j])
max_val[i] = max(max_val[i], max_val[j] + x[i]);
cout << *max_element(max_val, max_val + n) << endl;
}
return 0;
}