1.九度1011
来源:互联网 发布:rf手游网络错误 编辑:程序博客网 时间:2024/05/08 20:43
- 题目描述:
- 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个,例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和为20。现在增加一个要求,即还需要输出该子序列的第一个和最后一个元素。
- 输入:
测试输入包含若干测试用例,每个测试用例占2行,第1行给出正整数K( K< 10000 ),第2行给出K个整数,中间用空格分隔。当K为0时,输入结束,该用例不被处理。
- 输出:
对每个测试用例,在1行里输出最大和、最大连续子序列的第一个和最后一个元素,中间用空格分隔。如果最大连续子序列不唯一,则输出序号i和j最小的那个(如输入样例的第2、3组)。若所有K个元素都是负数,则定义其最大和为0,输出整个序列的首尾元素。
- 样例输入:
6-2 11 -4 13 -5 -210-10 1 2 3 4 -5 -23 3 7 -2165 -8 3 2 5 01103-1 -5 -23-1 0 -20
- 样例输出:
20 11 1310 1 410 3 510 10 100 -1 -20 0 0
- 来源:
</pre><pre name="code" class="cpp">#include <stdio.h>using namespace std;int main(){ int k; int num[10000]; int i; int sum,max,start,end; int tp1,tp2; int zero = 0; while(scanf("%d",&k)!=EOF) { if(k==0) return 0; for(i=0;i<k;i++) { scanf("%d",&num[i]); } sum=0; max=-1; start=0; end=0; tp1 = 0; tp2 = 0; for(i = 0;i < k;i++) { sum = sum + num[i]; tp2 = i; if(sum > max) { max = sum; end = tp2; start = tp1; } else if(sum < 0) { tp1 = i+1; sum = 0; } } if(max < 0) printf("%d %d %d\n",zero,num[0],num[k-1]); else printf("%d %d %d\n",max,num[start],num[end]); } return 0;}
0 0
- 1.九度1011
- 九度:1011
- 九度oj 1011
- 九度1011
- 九度 1011
- 九度1011 最大连续子序列
- 九度1011 最大连续子序列
- 九度 1011 最大连续子序列
- 九度:1011<A+B for Metrics>
- 九度 1011 最大连续子序列
- 九度1011:最大连续子序列
- 九度[1011]-最大连续子序列
- 九度1011-最大连续子序列
- 【九度OJ】:九度OJ 1050
- 【九度OJ】:九度OJ 1053
- 【九度OJ】:九度OJ 1056
- 【九度OJ】:九度OJ 1059
- 【九度OJ】:九度OJ 1206
- 图遍历的演示
- java实现二叉查找树
- poj 3264
- 杭电acm 题目分类
- Java实现Email的发送
- 1.九度1011
- POJ 1201 Intervals(图论-差分约束)
- Drcom账户管理Server端讲解
- 书籍推荐
- viewDidUnload 和 dealloc 的区别
- 范式和反范式
- 电子商务论文
- poj 1573 Robot Motion
- 主成分分析PCA