HDOJ 1003 Max Sum

来源:互联网 发布:linux dd iso u盘 编辑:程序博客网 时间:2024/05/22 06:46

HDACM1003

先接收一个数,把这个数当做最大值,并且该数列的开始和结束用s=1和d=1表示,接下来接收下一个数,先判断上一个数是否小于0 ,如果小于0,并用pos记录当前数的位置,则把当前这个数赋给last,用来当做下一个数的上一个数;否则把上一个数和当前这个数的和当做下一个数的上一个数。判断上一个数和当前数的和是否比最大的和要大,如果大,则上一个数和当前数的和当做最大值,并且把这个数列的开始(s=pos)和结束(d=j(表示当前数的位置)),如此循环下去直到最后一个数就可以求出最大和的数列的和,和它的开始位置和结束位置。

import java.util.Scanner;public class Main{    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        int t = sc.nextInt();        for (int i = 1; i <= t; i++) {            int m = sc.nextInt();            int prev = sc.nextInt(); //先接收一个数            int max = prev;//最大值先赋第一个数的值            int pos = 1 ;//记录第一个值不小于0的数的下标            int s = 1; //开始的下标            int d = 1;//结束的下标            int now;            for (int j = 2; j <= m; j++) {                now = sc.nextInt();                if (prev<0) {                    pos = j;                    prev = now;                }else {                    prev += now;                }                if (max<prev ) {                    max = prev;                    s = pos;                    d = j;                }            }            System.out.println("Case "+i+":");            System.out.println(max+" "+s+" "+d);            if (i<=t-1) {                System.out.println();            }        }    }}
原创粉丝点击