[url]http://acm.hdu.edu.cn/showproblem.php?pid=1087[/url]
[size=medium]题意:求递增段最大和
[color=blue]状态转移方程:dp[j] = max(dp[j], dp[i]+v[j])【前提v[j]>v[i], 构成递增】
其中j>i, dp[i]是前i个中的最优状态, v[j]是j的价值[/color][/size]
[size=medium]题意:求递增段最大和
[color=blue]状态转移方程:dp[j] = max(dp[j], dp[i]+v[j])【前提v[j]>v[i], 构成递增】
其中j>i, dp[i]是前i个中的最优状态, v[j]是j的价值[/color][/size]
#include <iostream>
using namespace std;
int dp[1005], value[1005];
int main()
{
int n, i, j, maxs;
while (cin >> n, n)
{
for (i = 0; i < n; i++)
cin >> value[i], dp[i] = value[i]; //初始化
maxs = value[0];
for (i = 0; i < n - 1; i++)
for (j = i + 1; j < n; j++)
if (value[j] > value[i])
dp[j] = max (dp[j], dp[i] + value[j]), maxs = max (maxs, dp[j]);
cout << maxs << endl;
}
return 0;
}