-1 0 010 1 48 0 3
/********************************** 日期:2013-2-18* 作者:SJF0115* 题号: 九度OJ 题目15:最大子向量和* 来源:http://ac.jobdu.com/problem.php?cid=1039&pid=14* 结果:AC* 来源:剑指Offer:名企面试官精讲典型编程题* 总结:http://blog.csdn.net/sjf0115/article/details/8589876**********************************/#include<stdio.h>int Num[100001];int main() {int i,j,n,sum,Max,indexStart,indexEnd,currentStart; while (scanf("%d",&n) != EOF && n != 0){sum = 0;for(i = 0;i < n;i++){scanf("%d",&Num[i]);//初始化if(i == 0){Max = Num[i];currentStart = 0;indexStart = 0;indexEnd = 0;}//如果当前得到的和是个负数,那么这个和在接下来的累加中应该抛弃并重新清零,不然的话这个负数将会减少接下来的和if(sum < 0){sum = Num[i];currentStart = i;}else{sum += Num[i];}if(sum > Max){Max = sum;indexStart = currentStart;indexEnd = i;}//注意:若是存在多个子向量,则输出起始元素最小的那个else if(sum == Max){if(Num[indexStart] > Num[currentStart]){indexStart = currentStart;indexEnd = i;}}}printf("%d %d %d\n",Max,indexStart,indexEnd); }//while return 0;}