Max Sum
2015-08-14 20:05
288 查看
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87125#problem/A
题意:
输入一组数,找出连续子序列中,最大的和。并输出和最大的子序列的首位置和末位置。
案例:
input
2
5 6 -1 5 4 -7
7 0 6 -1 1 -6 7 -5
output
Case 1:
14 1 4
Case 2:
7 1 6
思路分析:
让所有数从头开始相加,当和为负数时,只会让和变小,这时和清零,以下一个位置为起点再相加。找到最大和。
源代码如下:
题意:
输入一组数,找出连续子序列中,最大的和。并输出和最大的子序列的首位置和末位置。
案例:
input
2
5 6 -1 5 4 -7
7 0 6 -1 1 -6 7 -5
output
Case 1:
14 1 4
Case 2:
7 1 6
思路分析:
让所有数从头开始相加,当和为负数时,只会让和变小,这时和清零,以下一个位置为起点再相加。找到最大和。
源代码如下:
#include<iostream> #include<cstdio> #define MAX 100005 using namespace std; int main() { int T,N,t=1,x,y,maxn,sum,k,s[MAX]; scanf("%d",&T); while(T--) { int i; scanf("%d",&N); for(i=1;i<=N;i++) scanf("%d",&s[i]); x=1;y=1;maxn=-9999;sum=0;k=1; //maxn一定要足够小 for(i=1;i<=N;i++) { sum+=s[i]; if(sum>maxn) { maxn=sum; x=k; y=i; } if(sum<0) { sum=0; k=i+1; //确定新的起点 } } printf("Case %d:\n%d %d %d\n",t++,maxn,x,y); if(T)printf("\n"); } return 0; }
相关文章推荐
- hdu - 3594 Cactus (强连通)
- 确定比赛名次--hdoj
- ExecutorService常用方法和newFixedThreadPool创建固定大小的线程池
- HDU-2647 Reward(拓扑排序)
- J - Guilty Prince
- OC - ExtensionAndCategory
- (2)华为机试 ——消消乐
- hdu 3594 Cactus (仙人掌图判定/SCC)
- Android笔记_ContentProvider
- 确定比赛名次--hdoj
- c语言中malloc和calloc比较
- 树形dp
- asp.net mvc AjaxBeginForm使用
- Android笔记_数据存储
- Codeforces 570D TREE REQUESTS dfs序+树状数组
- H5填坑笔记--持续更新
- oracle TNS-03505: 无法解析名称错误
- android /linux休眠与唤醒(二)
- HIT 2060 Fibonacci Problem Again(矩阵乘法)
- 浅谈Javascript 中几种克隆(clone)方式