基础动态规划题。
递推公式:dp[i] = max(dp[i], dp[j]+chessmen[i])
dp[i]表示到达第 i 个棋子的最大递增子序列和。
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 1005;
int main()
{
int N;
int chessmen[MAXN]; //棋子
int dp[MAXN]; //动态规划
while (cin >> N)
{
if (N == 0)
break;
memset(dp, 0, sizeof(dp));
for (int i = 1; i <= N; i++)
{
cin >> chessmen[i];
dp[i] = chessmen[i];
}
int maximum = dp[0]; //最大值
for (int i = 1; i <= N; i++) //动态规划
{
for (int j = 1; j < i; j++)
{
if (chessmen[j] < chessmen[i])
dp[i] = max(dp[i], dp[j] + chessmen[i]);
}
if (dp[i] > maximum)
maximum = dp[i];
}
cout << maximum << endl;
}
return 0;
}
继续加油。
本文介绍了一种使用动态规划解决最大递增子序列问题的方法,通过递推公式dp[i]=max(dp[i],dp[j]+chessmen[i])来计算到达每个棋子位置的最大递增子序列和。
298

被折叠的 条评论
为什么被折叠?



