HDU1087 Super Jumping! Jumping! Jumping!


 

Super Jumping! Jumping! Jumping!

时间限制: 1 Sec   内存限制: 32 MB
提交: 16   解决: 2
[ 提交][ 状态][ 讨论版]

题目描述

Nowadays, a kind of chess game called “Super Jumping! Jumping! Jumping!” is very popular in HDU. Maybe you are a good boy, and know little about this game, so I introduce it to you now.



The game can be played by two or more than two players. It consists of a chessboard(棋盘)and some chessmen(棋子), and all chessmen are marked by a positive integer or “start” or “end”. The player starts from start-point and must jumps into end-point finally. In the course of jumping, the player will visit the chessmen in the path, but everyone must jumps from one chessman to another absolutely bigger (you can assume start-point is a minimum and end-point is a maximum.). And all players cannot go backwards. One jumping can go from a chessman to next, also can go across many chessmen, and even you can straightly get to end-point from start-point. Of course you get zero point in this situation. A player is a winner if and only if he can get a bigger score according to his jumping solution. Note that your score comes from the sum of value on the chessmen in you jumping path.
Your task is to output the maximum value according to the given chessmen list.

输入

Input contains multiple test cases. Each test case is described in a line as follow:
N value_1 value_2 …value_N 
It is guarantied that N is not more than 1000 and all value_i are in the range of 32-int.
A test case starting with 0 terminates the input and this test case is not to be processed.

输出

For each case, print the maximum according to rules, and one line one case.

样例输入

3 1 3 2
4 1 2 3 4
4 3 3 2 1
0

样例输出

4
10
3

水题:

英语不好是硬伤啊大哭,在学校平台比赛时完全看不懂啊。比赛完后请教有道才知道是水题,书到用时方恨少。

以下来自有道翻译

这个游戏可以由两个或两个以上的玩家玩。它由一个棋盘棋(盘)、一些棋子(棋子),和所有的棋子都是由一个正整数或“开始”或“结束”。玩家从开始点开始,最后必须跳到终点。在跳跃的过程中,玩家会在路上拜访棋子,但是每个人都必须从一个棋子跳到另一个更大的棋子(你可以假设起点是最小值,终点是最大值)。所有的球员都不能倒退。一个跳跃可以从一个棋子到下一个,也可以跨越许多棋子,甚至你可以从起点直接到达终点。当然,在这种情况下,你会得到零值。如果一个球员能在他的跳跃解决方案中得到一个更大的分数,那么他就是一个赢家。注意,你的分数来自于你跳跃路径上的棋子的价值之和。

您的任务是根据给定的chessmen列表输出最大值


输入包含多个测试用例。每个测试用例的描述如下:

N value_1 value_2…value_N

它是guarantied,N不大于1000,所有value_i都在32 - int范围内。

一个从0开始的测试用例将终止输入,这个测试用例将不被处理


代码如下

#include<iostream>
using namespace std;
int a[1010],dp[1010];
int main()
{
	int n;
	while(cin>>n&&n!=0)
	{
		int max=0;
		for(int i=1;i<=n;i++)
		{
		cin>>a[i];
		dp[i]=a[i];
	}
		for(int i=1;i<=n;i++)
		for(int j=0;j<i;j++)
		if(a[i]>a[j])
		{
		dp[i]=dp[i]>dp[j]+a[i]?dp[i]:dp[j]+a[i];
		if(max<dp[i])
		max=dp[i];
	}
		cout<<max<<endl;
	}
 } 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值