Cod sursa(job #2382173)

Utilizator alexandra.scarlatScarlat Alexandra alexandra.scarlat Data 17 martie 2019 20:13:47
Problema Subsecventa de suma maxima Scor 40
Compilator java Status done
Runda Arhiva educationala Marime 1.25 kb
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) throws IOException {
		
		File file = new File("ssm.in");
		
		Scanner sc = new Scanner(file);
		FileWriter fileWriter = new FileWriter("ssm.out");
	    
		int n = sc.nextInt();
		int[] v = new int[n];
		int[] dp = new int[n];
		
		int max = 0;
		for(int i = 0; i < n ; i++) {
			v[i] = sc.nextInt();
		}
		
		dp[0] = v[0];
		 
		// caz general
		for (int i = 1; i < n; ++i) {
			if (dp[i - 1] >= 0) {
				// extinde la dreapta cu v[i]
				dp[i] = dp[i - 1] + v[i];
			} else {
				// incep o noua secventa
				dp[i] = v[i];
			}
		}
		
	 
		// solutia e maximul din vectorul dp
		int sol = dp[0];
		int stopIndex = 0;
		for (int i = 1; i < n; ++i) {
			
			if (dp[i] > sol) {
				sol = dp[i];
				stopIndex = i;
			}
		}
		
		int startIndex = stopIndex;
		int sum = 0;
		while(startIndex != -1 && dp[stopIndex] != sum) {
			sum+=v[startIndex];
			startIndex--;
			
		}
	 
		startIndex+=2;
		stopIndex+=1;
	    
	    sc.close();
	    fileWriter.write(sol+ " " + startIndex + " " + stopIndex);
	    fileWriter.close();
	}
}