[简单DP]Super Jumping! Jumping! Jumping! HDU - 1087
题目大意:给你一个1*(n+2)的棋盘,第一个为开始,最后一个结束,中间有N个数字。从“”开始“”开始跳跃,你可以跳跃任意多个棋子,比如可以直接跳到“”结束“”,这样得分为0。跳到数字上时,每次只可以跳到比当前数字大的棋子上。最后得到的分数为跳跃棋子数字之和,问你最大是多少。
分析:明显是求最大递增子序列和。两个for暴力。。。
代码:
#include<stdlib.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<stdio.h>
#include<queue>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)&&n)
{
int num[1100];
int dp[1100];
for(int i=1;i<=n;i++)
{
scanf("%d",&num[i]);
dp[i]=num[i];
}
int Max=0;
for(int i=1;i<=n;i++)
{
int key=0;
for(int j=1;j<i;j++)
{
if(num[j]<num[i])
{
if(key<dp[j])
key=dp[j];
}
}
dp[i]+=key;
if(Max<dp[i])
Max=dp[i];
}
printf("%d\n",Max);
}
return 0;
}