最大子段和——解题报告

来源:互联网 发布:集思宝怎么导出数据 编辑:程序博客网 时间:2024/06/06 06:59

题目描述

给定长度为n的整数序列,a[1...n],求[1,n]某个子区间[i,j]使得a[i]+…+a[j]和最大.或者求出最大的这个和.例如(-2,11,-4,13,-5,2)的最大子段和为20,所求子区间为[2,4].

 

输入描述

第一行为一个整数n,表示数组有n个数据,第二行依次输入n个整数

 

输出描述

计算出n个整数中连续k个数的最大和


解题报告:

简单dp。


package practice;import java.util.Scanner;public class N28MaxFieldSum {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int[] a = new int[n];for(int i=0;i<n;i++){a[i]=sc.nextInt();}int c=0,sum=0,begin=0,end=0;for(int i=0;i<n;i++){if(c>0){c+=a[i];}else{c=a[i];begin=i;}if(c>sum){sum=c;end=i;}}System.out.println(sum);System.out.println(begin+" "+end);}}