Cod sursa(job #1426614)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 30 aprilie 2015 00:19:28
Problema Transport Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <vector>
#include <fstream>
using namespace std;

//care este cel mai bun mod de a imparti primele d numere in k parti
int f(const int d, const int k, const vector<int>& sume_part,
	 const vector<int>& maxim_pana_la){
	if(d == 1){
		return sume_part[0]; }
	else if(k >= d){
		return maxim_pana_la[d-1]; }
	else if(k == 1){
		return sume_part[d-1]; }
	else{
		int rez = sume_part[d], tmp;
		for(int nr_scoase = d-1; nr_scoase >= k-1; --nr_scoase){
			tmp = max(f(nr_scoase, k-1, sume_part, maxim_pana_la),
				sume_part[d-1] - sume_part[nr_scoase-1]);
			rez = min(tmp, rez); }
		return rez; } }

void citeste(int& n, int& k, vector<int>& sume_part, vector<int>& maxim_pana_la){
	ifstream f("transport.in");
	f >> n >> k;
	sume_part.resize(n);
	maxim_pana_la.resize(n);
	for(int i = 0, x, s = 0, M = -1; i < n; ++i){
		f >> x;
		s += x;
		M = max(M, x);
		sume_part[i] = s;
		maxim_pana_la[i] = M; } }

int main(){
	int n, k;
	vector<int> sume_part, maxim_pana_la;
	citeste(n, k, sume_part, maxim_pana_la);
	ofstream g("transport.out");
	g << f(n, k, sume_part, maxim_pana_la);
	return 0; }