Pagini recente » Cod sursa (job #578958) | Cod sursa (job #1831565) | Cod sursa (job #2114118) | Cod sursa (job #935960) | Cod sursa (job #2857813)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int verificare(int mid, int transport[]);
int n, k;
int main()
{
int i, low = -1, high, solutie, mid;
fin>>n>>k;
int transport[n];
for(i = high = 0; i < n; i++){
cin>>transport[i];
high += transport[i];
if(transport[i] > low)
low = transport[i];
}
if(k == 1)
fout<<high;
else{
while(low < high - 1){
mid = (high + low) / 2;
if(verificare(mid, transport)){
//cout<<"verificam, mid = "<<mid<<", high = "<<high<<", low = "<<low<<"\n";
solutie = mid;
high = mid;
}
else{
//cout<<"mid = "<<mid<<", high = "<<high<<", low = "<<low<<"nu a mers\n";
low = mid;
}
}
fout<<solutie;
}
}
int verificare(int mid, int transport[]){
int i, j, sum;
for(i = j = 0; i < k; i++){
sum = 0;
while(sum + transport[j] <= mid){
sum += transport[j];
j++;
if(j >= n)
return 1;
}
}
return 0;
}