博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态规划: HDU1003Max Sum
阅读量:7044 次
发布时间:2019-06-28

本文共 2616 字,大约阅读时间需要 8 分钟。

Max Sum

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 251171    Accepted Submission(s): 59503
Problem Description
Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 14.
 
Input
The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line starts with a number N(1<=N<=100000), then N integers followed(all the integers are between -1000 and 1000).
 
Output
For each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line contains three integers, the Max Sum in the sequence, the start position of the sub-sequence, the end position of the sub-sequence. If there are more than one result, output the first one. Output a blank line between two cases.
 
Sample Input
 
2 5 6 -1 5 4 -7 7 0 6 -1 1 -6 7 -5
 
Sample Output
 
Case 1: 14 1 4 Case 2: 7 1 6
 
Author
Ignatius.L
Problem :     Judge Status : Accepted
RunId : 21239601    Language : G++    Author :
Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta
#include<iostream> #include<cstring> #include<cstdio> using namespace std; const int INF = -(1<<30); int main(){ int T,n,cnt = 0; scanf("%d",&T); while(T--){ int ans ,start=1,tail,tmp = 0, x,ts; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&x); if(i==1){ ans = tmp = x; start = tail = ts = 1; } else{ if(x > x + tmp){ tmp = x; ts = i; } else tmp = tmp + x; } if(tmp > ans ){ ans = tmp; start = ts,tail = i; } } printf("Case %d:\n%d %d %d\n",++cnt,ans,start,tail); if(T) printf("\n"); } }
#include
#include
#include
using namespace std;const int INF = -(1<<30);int main(){
int T,n,cnt = 0; scanf("%d",&T); while(T--){
int ans ,start=1,tail,tmp = 0, x,ts; scanf("%d",&n); for(int i=1;i<=n;i++){
scanf("%d",&x); if(i==1){
ans = tmp = x; start = tail = ts = 1; } else{
if(x > x + tmp){
tmp = x; ts = i; } else tmp = tmp + x; } if(tmp > ans ){
ans = tmp; start = ts,tail = i; } } printf("Case %d:\n%d %d %d\n",++cnt,ans,start,tail); if(T) printf("\n"); }}
 

转载于:https://www.cnblogs.com/Pretty9/p/7347700.html

你可能感兴趣的文章
栈和堆(Stack && Heap)
查看>>
Android布局优化之过度绘制
查看>>
removing objects from an array
查看>>
【物联网】QCA4010开发环境的搭建
查看>>
NIO.2 入门,第 2 部分: 文件系统 API
查看>>
在SQL Server中使用种子表生成流水号注意顺序
查看>>
java多线程的等待唤醒机制及如何解决同步过程中的安全问题
查看>>
开源一个Odoo钉钉集成模块
查看>>
vim 一键运行 node中.js文件
查看>>
6月第5周业务风控关注 | 《网络安全等级保护条例(征求意见稿)》本周正式发布...
查看>>
云端Linux成为两大挖矿黑客集团的战场
查看>>
JavaScript之内存机制
查看>>
SRX 硬件相关
查看>>
vue-cli搭建之[环境变量][path]真解
查看>>
弄懂Android 源码中那些巧妙位运算
查看>>
人脸实时签到(three.js+tracking.js)基于浏览器
查看>>
JavaScript正则表达式
查看>>
面试题 LazyMan 的 Rxjs 实现方式
查看>>
141. Linked List Cycle
查看>>
外部资料集合
查看>>