Pagini recente » Cod sursa (job #2267738) | Cod sursa (job #1640459) | Cod sursa (job #1540968) | Cod sursa (job #1782676) | Cod sursa (job #1130943)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
vector <int> s;
int n, k, suma, maxim, rez;
int valid(int x)
{
int crt=0, tot=1;
for(int i=0; i<n; i++){
if(crt+s[i] <=x)
crt+=s[i];
else{
crt = s[i];
tot++;
}
}
if(tot>k)
return -1;
if(tot <= k)
return 1;
}
int caut_bin()
{
int lo, hi, mid;
lo = maxim-1;
hi = suma+1;
while(hi-lo>1){
mid = lo +(hi-lo)/2;
if(valid(mid) == -1)
lo = mid;
else
hi = mid;
}
return hi;
}
int main()
{
freopen("transport.in", "r", stdin);
freopen("transport.out", "w", stdout);
int t;
scanf("%d %d\n", &n, &k);
for(int i=0; i<n; i++){
scanf("%d ", &t);
if(t>maxim) maxim = t;
s.push_back(t);
suma+=t;
}
printf("%d", caut_bin());
return 0;
}