Cod sursa(job #2382216)

Utilizator alexandra.scarlatScarlat Alexandra alexandra.scarlat Data 17 martie 2019 21:14:27
Problema Subsecventa de suma maxima Scor 40
Compilator java Status done
Runda Arhiva educationala Marime 1.52 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 {
	static class Sol{
		int start;
		int stop;
		int val;
	}
	public static void main(String[] args) throws IOException {
		
		File file = new File("ssm.in");
		
		Scanner sc = new Scanner(file);
		//Scanner sc = new Scanner(System.in);
		FileWriter fileWriter = new FileWriter("ssm.out");
	    
		int n = sc.nextInt();
		
		Sol[] dp = new Sol[2];
		Sol aux;
		//int[] dp = new int[n];
		
		
		int v = sc.nextInt();
		Sol s = new Main.Sol();
		dp[0] = s;
		dp[0].val = v;
		int pos = 0;
		dp[0].start = pos;
		dp[0].stop = pos;
		Sol sol = dp[0];
		// caz general
		for (int i = 1; i < n; ++i) {
			v = sc.nextInt();
			if (dp[0].val >= 0) {
				// extinde la dreapta cu v[i]
				s = new Main.Sol();
				dp[1] = s;
				dp[1].val = dp[0].val + v;
				dp[1].start = pos;
				dp[1].stop = i;
			} else {
				// incep o noua secventa
				s = new Main.Sol();
				dp[1] = s;
				pos = i;
				dp[1].val = v;
				dp[1].start = pos;
				dp[1].stop = i;
			}
			dp[0]=dp[1];
			if (dp[1].val > sol.val) {
				sol = dp[1];
			}
		}
		
	 
		// solutia e maximul din vectorul dp
		
		/*for (int i = 1; i < n; ++i) {
			
			if (dp[i].val > sol.val) {
				sol = dp[i];
			}
		}*/
		
		
	 
		sol.start+=1;
		sol.stop+=1;
	    
	    sc.close();
	    fileWriter.write(sol.val+ " " + sol.start + " " + sol.stop);
	    fileWriter.close();
	}
}