Cod sursa(job #2382282)

Utilizator gabriel.crosmanCrosman Gabriel gabriel.crosman Data 18 martie 2019 00:07:50
Problema Subsecventa de suma maxima Scor 95
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <iomanip>
#include <vector>
#include <algorithm>
using namespace std;

class SSM {
 public:
	void solve() {
		read_input();
		ssm();
	}

 private:
	int n;
	int *v;

	void read_input() {
		ifstream fin("ssm.in");
		fin >> n;
		v = new int[n];
		for (int i = 1; i <= n; i++) {
			fin >> v[i];
		}
		fin.close();
	}

	void ssm() {

		ofstream fout("ssm.out");

		int i, start = 1, final = 1;
		int *dp = new int[n];

		dp[1] = v[1];
		int new_start, max = dp[1];

		// dp[i] = max(v[i], dp[i - 1] + v[i])
		for (i = 2; i <= n; i++) {
				
			if (dp[i - 1] < 0) {
				new_start = i;
			}
				
			dp[i] = v[i];
				
			if (v[i] < dp[i - 1] + v[i]) {
					
				dp[i] = dp[i - 1] + v[i];
			}	
					
			if (max < dp[i]) {
					
				max = dp[i];
				final = i;
				start = new_start;
			}
		}

		fout << max << " " << start << " " << final << endl;

		delete [] dp;
		delete [] v;
		fout.close();
	}
};

int main() {
	SSM solutie;
	solutie.solve();
	return 0;
}