Cod sursa(job #2382161)

Utilizator gabriel.crosmanCrosman Gabriel gabriel.crosman Data 17 martie 2019 19:57:17
Problema Subsecventa de suma maxima Scor 25
Compilator java Status done
Runda Arhiva educationala Marime 1.3 kb
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

public class Main {

	static class SSM {
		
		int n;
		int[] v;
		
		private void readInput() {
			
			try {
				Scanner sc = new Scanner(new File("ssm.in"));
				n = sc.nextInt();
				v = new int[n + 1];
				for (int i = 1; i <= n; i++) {
					v[i] = sc.nextInt();
				}
				sc.close();
			} catch (IOException e) {
				throw new RuntimeException(e);
			}
		}
		
		private void ssm() throws FileNotFoundException {
			
			PrintWriter pw = new PrintWriter("ssm.out");
			
			int[] dp = new int[n + 1];
			int i, start = 1, fin = 1;
			dp[1] = v[1];
			int max = dp[1];
			
			// dp[i] = max(v[i], dp[i - 1] + v[i])
			for (i = 2; i <= n; i++) {
				
				if (v[i] > dp[i - 1] + v[i] && v[i] > 0) {
					
					start = i;
					dp[i] = v[i];
				} else {
					
					dp[i] = dp[i - 1] + v[i];
				}
				
				if (max < dp[i]) {
					
					max = dp[i];
					fin = i;
				}
			}
			
			pw.printf("%d %d %d\n", max, start, fin);
			
			pw.close();
		}
		
		public void solve() {
			readInput();
			try {
				ssm();
			} catch (FileNotFoundException e) {

				e.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		new SSM().solve();
	}

}