Cod sursa(job #652937)

Utilizator mihaibogdan10Mihai Bogdan mihaibogdan10 Data 26 decembrie 2011 20:11:20
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<cstdio>
#include<vector>
using namespace std;

vector<int> mSaltea;
int N, K;

bool PotTransporta(int capacitate){
	int i, masa = 0, drumuri = 1;
	for (i = 0; i < N; i++){
		if (masa + mSaltea[i] > capacitate) drumuri ++, masa = 0; 
		if (drumuri > K) return false;
		masa += mSaltea[i];
	}
	return true;
}

int CautaBinarCapacitatea(int st, int dr){
	while(st <= dr){
		int m = (st + dr) / 2;
		if (PotTransporta(m) && !PotTransporta(m-1)) return m;
		else if (PotTransporta(m)) dr = m - 1;
		else st = m + 1;
	}
	return -1;
}
int main(){
	freopen("transport.in", "r", stdin), freopen("transport.out", "w", stdout);
	int i, x, masaMAX = 0, sumMasa = 0;
	
	scanf("%d %d", &N, &K);
	for (i = 0; i < N; i++){
		scanf("%d", &x);
		mSaltea.push_back(x);
		if (masaMAX < x) masaMAX = x;
		sumMasa += x;
	}
	
	printf("%d", CautaBinarCapacitatea(masaMAX, sumMasa));
	return 0;
}