24.最大子段和 (20分)

来源:互联网 发布:安卓游戏知乎 编辑:程序博客网 时间:2024/06/14 01:06
题目内容:
 实数序列a[1],a[2],...a[n], 一个子段指一段连续的子序列a[i],a[i+1],...a[j], 其中1<=i<=j<=n. 要求给出具有最大和的子段。要求算法时间复杂性为o(n)。
输入描述
第一行输入一个整数n,表示原序列共有n个数据;第二行输入n个实数,用空格隔开。

输出描述
最大和的子段,每个数据也用空格隔开。(本题的测试数据能保证最大和的那一个子段是唯一的)

输入样例
7-1 3 -2 4 -1 6 -5

输出样例

3 -2 4 -1 6


#include <stdio.h>int main(){int n,max=0,start=0,end=0,sum;scanf("%d",&n);int *a=new int[n];for(int i=0;i<n;i++){scanf("%d",&a[i]);}for(i=0;i<n;i++){for(int j=0;j<n;j++){sum=0;for(int k=i;k<=j;k++)sum+=a[k];if(sum>max){start=i;end=j;max=sum;}}}for(int z=start;z<=end;z++)printf("%d ",a[z]);return 0;}


0 0
原创粉丝点击