超级跳!跳!跳!
时间限制:2000/1000 MS(Java / Others)内存限制:65536/32768 K(Java / Others)
总提交数:56611接受提交内容:26265
问题描述
如今,一种名为“超级跳跃!”的国际象棋游戏!跳!跳跃!“在HDU中很受欢迎。也许你是一个好孩子,对这个游戏知之甚少,所以我现在介绍给你。
游戏可以由两个或两个以上的玩家进行。它由棋盘(棋盘)和一些西洋棋棋子组成,所有西洋棋棋子都用正整数或“开始”或“结束”标记。玩家从起点开始,最后必须跳到终点。在跳跃过程中,玩家将访问路径中的西洋棋棋子,但是每个人都必须从一个棋子跳到另一个绝对更大的棋子(你可以假设起点是最小值,终点是最大值)。并且所有球员都不能倒退。一个跳跃可以从西洋棋棋子到下一个,也可以穿过许多西洋棋棋子,甚至你可以直接从起点到达终点。当然,在这种情况下,你得到零点。只有当他能够根据他的跳跃解决方案获得更高的分数时,玩家才是赢家。
您的任务是根据给定的西洋棋棋子列表输出最大值。
输入
输入包含多个测试用例。每个测试用例的描述如下:
N value_1 value_2 ... value_N
保证N不大于1000且所有value_i都在32-int范围内。
以0开头的测试用例终止输入,并且不处理该测试用例。
产量
对于每种情况,根据规则打印最大值,并且一行打印一个。
样本输入
3 1 3 2
4 1 2 3 4
4 3 3 2 1
0
样本输出
4
10
3
最长上升子序列
#include<iostream>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<sstream>
#include<cmath>
using namespace std;
int main()
{
int len[1001],element[1001];
int n,i,temp,max;
cin >> n;
while(n){
i = 0;
while(n--){
cin >> element[i];
max = element[i];
for(int j=0; j<i; j++){
if(element[i] > element[j] && max < len[j] + element[i]){
max = len[j] + element[i];
}
}
len[i] = max;
i++;
}
max = len[0];
for(int j=0; j<i; j++)
if(max < len[j])
max = len[j];
cout << max << endl;
cin >> n;
}
return 0;
}