Super Jumping! Jumping! Jumping!

Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Appoint description: 
System Crawler  (2017-04-13)

Description

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

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. 
 

Output

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

Sample Input

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

Sample Output

4
10
3
 
求最长连续递增序列的和
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[],f[];
int main()
{
int n;
while(~scanf("%d",&n))
{
if(!n)
break;
memset(a,,sizeof(a));
for(int i=;i<n;i++)
scanf("%d",&a[i]);
int maxn = ;
for(int i=;i<n;i++)
{
f[i] = a[i];//先给每个f[i]附一个本身的值
for(int j=i-;j>=;j--)
{
if(a[i]>a[j]&&a[i]+f[j]>f[i])//从a[i]的前面找出比a[i]小的
f[i] = a[i] + f[j];//然后dp每个f[i]
}//注意 4 3 2 1 3 结果为5 递增序列为 2 3
}
for(int j=n-;j>=;j--)
{
if(maxn < f[j])
maxn = f[j];
}
printf("%d\n",maxn);
}
return ;
}
 在加一种dp方法,这种dp更简单
#include <iostream>
#include<cstdio>
#include<algorithm>
#include<string.h>
using namespace std;
int dp[],a[];
int main(){
int n;
while(cin >> n){
if(!n){
break;
}
for(int i=;i<=n;i++){
cin >> a[i];
}
memset(dp,,sizeof(dp));
int ans = ;
for(int i=;i<=n;i++){//注意这里从一开始的
for(int j=;j<i;j++){
if(a[j]<a[i])
dp[i] = max(dp[i],dp[j]+a[i]);
//因为a数组从一开始的,所以dp[0]永远为0,这样比较时,j=0时可以与a[i]比较大小
}
ans = max(ans,dp[i]);
}
cout << ans << endl;
}
return ;
}
 
 

最新文章

  1. python学习之——调用adb命令完成移动端界面测试
  2. MyEclipse无法启动调试:Cannot connect to VM
  3. RAC和ASM环境下修改控制文件control file
  4. Android 图片三级缓存之内存缓存(告别软引用(SoftRefrerence)和弱引用(WeakReference))
  5. 今天,安装了一个GANGLIA玩玩,以后再测试NAGIOS吧。
  6. JS 通过系统时间限定 动态添加 select option
  7. java操作mongodb——更新数据
  8. 桌面远程连接阿里云服务器(windows)后丧失了双向文件复制粘贴功能的解决方案(第一条博客!)
  9. git 一些基本的命令操作总结
  10. Codeforces 781C Underground Lab
  11. FacebookFriendAdderPro
  12. 拟牛顿 DFP matlab
  13. setnx redis
  14. P2572 [SCOI2010]序列操作
  15. hadoop基本认识
  16. 【android】ViewPager 大量内容页的内存优化
  17. BASE64Encoder及BASE64Decoder编译器找不到问题
  18. OpenStack openvswitch 实践
  19. java 散列运算浅分析 hash()
  20. 三、docker学习笔记——安装postgresql

热门文章

  1. 基于SpringBoot从零构建博客网站 - 集成editor.md开发发布文章功能
  2. Hadoop 系列(四)—— Hadoop 开发环境搭建
  3. LeetCode :2.两数相加 解题报告及算法优化思路
  4. GBK和UTF-8的区别
  5. Compatibility模式安装windows7后改为AHCI模式无法启动Windows7的解决办法
  6. Excel批量导入(导出同理)
  7. 腾讯物联TencentOS tiny上云初探
  8. iOS项目之多Targets和多环境配置
  9. HashMap这些问题你知道吗?
  10. 后端开发之chrome开发者模式