暑假集训(5)第一弹——— Super Jumping! Jumping! Jumping!(hdu1087)

时间:2023-03-08 15:51:18
暑假集训(5)第一弹——— Super Jumping! Jumping! Jumping!(hdu1087)

题意概括:在上次与娑殚的三次博弈中,你们都取得了胜利。便向娑殚提出要求,借助他的力量,传送到一个安全的地方。

你们的愿望达成了,不过,你和小A似乎失散了。

街上人来人往的特别热闹,每一个人的脸上都洋溢着幸福.“咕咕......"额,掏了掏身上的口袋,除你之外。

“听说了嘛,德源街哪有个脑力比赛,据说优胜者可以去”吃到饱“饭店吃到饱,而且前三名还会有神秘奖品......"

这次,为了填饱......嗯,为了生存,你决定参加这个比赛,比赛要求你得到在给定的数字中得到最大循序上升序列和。

问题分析:求得是最大递增子序列和,用递推法,首先i 需要逆序排列,先算出后面的,然后逐步递推。

方程为 打dp[i] = max(dp[i],m[i]+dp[j]);

 #include "cstdio"
int m[];
int dp[];
void mbegin(int n)
{
for (int i=;i<n;i++)
{
scanf ("%d",&m[i]);
dp[i] = m[i];
}
}
int max(int x,int y)
{
return x>y?x:y;
}
int main()
{
int n;
__int64 sum;
while (scanf ("%d",&n) && n)
{
mbegin(n);
for (int i=n-;i>=;i--)
for (int j=i;j<n;j++)
{
if (m[i] < m[j])
dp[i] = max (dp[i],m[i]+dp[j]);
}
sum = dp[];
for (int i=;i<n;i++)
{
if (sum < dp[i])
sum = dp[i];
}
printf ("%I64d\n",sum);
} return ;
}