hdu1087Super Jumping! Jumping! Jumping!(最大递增序列和)
题意:棋牌游戏如今,一种被称为“超级跳!跳!跳!“HDU是非常流行的。也许你是个好孩子,这个游戏知之甚少,所以我介绍给你吧。

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087
题目解析:简单的来说就是求一个序列中一组递增序列的最大和;
如:1,9,6 ,2 ,4,10,5,3,2
它的最大递增序列和为20,递增序列为1,9,10
和最大递增序列有点相似,但算法不太相同;
运行时间:
9139511 Accepted108715MS432K856 BC++
代码实现:
#include<stdio.h>#include<cstring>using namespace std;#pragma comment(linker,"/STACK:102400000,102400000")#define MAX 1005int dp[MAX];//dp[i]存储与num[i]构成递增序列中和最大的一个;int num[MAX];int max(int a,int b){ return(a>b?a:b);}int main(){ //freopen("input.txt","r",stdin); int i,j,n; while(scanf("%d",&n),n) { for(i=0;i<n;i++) scanf("%d",&num[i]); dp[0]=num[0]; int max1=0; for(i=1;i<n;i++) { dp[i]=num[i]; for(j=0;j<i;j++) { if(num[i]>num[j])//找出比num[i]小的数num[j],dp[j]存储与num[j]构成递增序列中和最大的一个;所以加上num[i],也构成递增序列, { if(dp[i]<dp[j]+num[i])//比较与num[i]能构成递增序列的这些序列和,找出最大的一个, dp[i]=dp[j]+num[i]; } } max1=max(dp[i],max1);//max1为这些递增序列中和最大的一个; } printf("%d\n",max1); } return 0;}