题目链接
根据题意和所给数据,大概能推测出是最长递增子序列,并计算其和的题;
代码如下:
dp[i]是以num[i]为元素结尾的最大子序列和;
#pragma warning(disable:4996);
#include <stdio.h>
#include <algorithm>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <queue>
#include<math.h>
using namespace std;
int num[1005], dp[1005];
int main()
{
int n;
while (cin >> n && n)
{
for (int i = 0;i < n;i++)
{
cin >> num[i];
dp[i] = num[i];
}
for (int i = 0;i < n;i++)
{
for (int j = 0;j < i;j++)
if (num[i] > num[j] && dp[i] < dp[j] + num[i]) dp[i]=dp[j]+num[i];若当前结点大于第j个结点,且当前的最优解dp[i]小于第j个位置的结点-跳到->当前结点i所得解,则当前最优解变为dp[j]+num[i]
}
int ans = -1;
for (int i = 0;i < n;i++)
{
if (dp[i] > ans) ans = dp[i];
}
cout << ans << endl;
}
}