#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浙江理工大学我的编程之路(仅供参考,不能直接提交)