Cod sursa(job #1287980)

Utilizator StefanLLeonte Stefan FMI StefanL Data 8 decembrie 2014 12:37:05
Problema Subsecventa de suma maxima Scor 0
Compilator java Status done
Runda Arhiva educationala Marime 1.54 kb
//http://www.infoarena.ro/probleme-cu-secvente
//Ideea 3 de rezolvare

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

public class subsumamax {
	
	/*public static void citire_vector(int a[], int n){
		Scanner sc = new Scanner(System.in);
		for(int i=1;i<=n;i++){
			System.out.println("a["+i+"]= ");
			a[i]=sc.nextInt();
		}
		sc.close();
	}*/
	
	/*public static void afisare_vector(int a[], int n){
		for(int i=1;i<=n;i++)
			System.out.print(a[i]+" ");
		System.out.println();
	}*/
	
	public static void suma_max(int a[], int sum[], int best[], int n) throws IOException{
		FileWriter fWriter = new FileWriter ("ssm.out");
	    PrintWriter pWriter = new PrintWriter (fWriter);
		sum[0]=0;
		int index=0, bg=0, sf=0;
		for(int i=1;i<=n;i++)
			sum[i]=a[i]+sum[i-1];
		int min = sum[0];

		int BestSum = Integer.MIN_VALUE;
		for(int i=1;i<=n;i++){
			best[i] = sum[i] - min;
			if(min>sum[i]) {min = sum[i]; index=i;}
			if(best[i]>BestSum) {BestSum = best[i]; bg=index+1; sf=i;}
		}
		pWriter.print(BestSum + " " + bg + " " + sf);
		pWriter.close();
	}

	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(new File("ssm.in"));
		int a[], sum[], best[], n;
		n = sc.nextInt();
		a = new int[100];
		sum = new int[100];
		best = new int[100];
		for(int i=1;i<=n;i++)
			a[i]=sc.nextInt();
		//citire_vector(a,n);
		suma_max(a,sum,best,n);
		sc.close();
	}

}