超级跳跳跳1281

#include<bits/stdc++.h>
const int inf=0x7fffffff;
int main()
{
	int N,i,j,ans,count;
    int a[1005],dp[1005];
	while(~scanf("%d",&N))
	{
		if(N==0)
			break;
		memset(dp,0,sizeof(dp));
			cin>>a[i];
		for(i=1;i<=N;i++)
		{
			ans=-inf;				
			for(j=0;j<i;j++)
			{
				if(a[i]>a[j])				
					ans=max(ans,dp[j]);
			}
			dp[i]=ans+a[i];
		}
		sort(dp+1,dp+N+1);			
			cout<<dp[N]<<endl;
	}
	return 0;
}

题目描述

如今,一种叫做“超级跳跳跳!”的国际象棋游戏在ZSTU很受欢迎。也许你是一个好孩子,对这个游戏知之甚少,所以我现在介绍给你。

游戏可由两个或两个以上的玩家玩。它由一个棋盘和一些西洋棋棋子组成,所有西洋棋棋子都用正整数或“开始”或“结束”标记。玩家从起点开始,最后必须跳到终点。在跳跃过程中,玩家将访问路径中的西洋棋棋子,但是每个人都必须从一个棋子跳到另一个绝对更大的棋子(你可以假设起点是最小值,终点是最大值)。并且所有玩家都不能倒退。一个跳跃可以从西洋棋棋子到下一个,也可以穿过许多西洋棋棋子,甚至你可以直接从起点到达终点。当然,在这种情况下你得到零点。只有当玩家能够根据他的跳跃方案获得更高的分数时,才是赢家。请注意,您的得分来自您跳跃路径中西洋棋棋子的价值总和。您的任务是根据给定的西洋棋棋子列表输出最大值。
 

输入

输入包含多个测试用例。每个测试用例的描述如下: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

Loginhttp://47.96.116.66/problem.php?cid=4652&pid=10浙江理工大学我的编程之路(仅供参考,不能直接提交)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值