题目链接: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\n", maxx); 24 } 25 26 27 }
因为我很菜,希望有哪里讲错的,希望各位大佬指出。同时如果有不理解的可以找我讨论。
最后,祝各位老板身体健康,刷题愉快,次次ac!
Super Jumping! Jumping! Jumping!(求最大上升子序列和)
原文:https://www.cnblogs.com/kitalekita/p/13290632.html