Super Jumping! Jumping! Jumping!(求最大上升子序列和)

题目链接HDU - 1087

题目:

 

这道题的题意是:有一个游戏叫“超级跳跃”,它有一个棋盘和一些棋子,所有棋子上面标记一些正整数,或者start,或者end。玩家从起点开始,最后必须跳到终点。在跳跃的过程中,玩家会访问路径中的棋子,但是每个人都必须从一个棋子跳到另一个绝对大的棋子(可以假设起点是最小的,终点是最大的)。所有的玩家都不能倒退。一跳可以从一个棋子跳到下一个,也可以跨越多个棋子,甚至可以从起点直接到达终点。当然在这种情况下你得零分。一个球员只有当他能根据他的跳投方案得到更高的分数时,他才是赢家。

题解:这道题看题目,在看输入与输出,就是求最大上升子序列和,然后这道题可以作为最大上升子序列和的模板。(具体什么解释明天再说 太困了,就先上代码,而且感觉代码要比我讲的要跟清楚,更让人理解)

ac代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 const int maxn = 1005;
 6 int ah[maxn];
 7 int sum[maxn];
 8 int main(){
 9     int n;
10     while(~scanf("%d",&n)){  
11         if(!n)break;
12         for (int i = 1; i <= n; i++)
13         {
14             scanf("%d", &ah[i]);
15             sum[i]=ah[i]; 
16             for (int j = i - 1; j > 0; j--)
17             {
18                 if (ah[i] > ah[j])
19                     sum[i] = max(sum[j] + ah[i], sum[i]);
20             }
21         }
22         int maxx = *max_element(sum + 1, sum + 1 + n);
23         printf("%d
", maxx);
24     }
25     
26       
27 }
View Code

因为我很菜,希望有哪里讲错的,希望各位大佬指出。同时如果有不理解的可以找我讨论。

最后,祝各位老板身体健康,刷题愉快,次次ac!

原文地址:https://www.cnblogs.com/kitalekita/p/13290632.html