Pagini recente » Cod sursa (job #539464) | Cod sursa (job #341765) | Cod sursa (job #2645868) | Cod sursa (job #1678764) | Cod sursa (job #2624546)
#include <bits/stdc++.h>
using namespace std;
int v[16003],n,k;
int verif(int c) {
int i = 0, cur = 0, suma = 0;
while( i <= n){
if(cur + v[i] <= c)
cur += v[i];
else
{
cur = v[i];
suma++;
}
i++;
}
if(cur != 0)
suma++;
return suma;
}
int BS(int st, int dr) {
while(st <= dr) {
int mij = (st+dr)/2;
int s1 = verif(mij);
if(s1 == k) {
if(verif(mij - 1) > k)
return mij;
else
dr = mij - 1;
}
if(s1 < k)
dr = mij - 1;
if(s1 > k)
st = mij + 1;
}
}
int main() {
freopen("transport.in", "r", stdin);
freopen("transport.out", "w", stdout);
scanf("%d %d",&n,&k);
int max1 = 0;
for(int i = 1; i <= n; i++)
{
scanf("%d",&v[i]);
if(v[i] > max1)
max1 = v[i];
}
int result = BS(max1,n*16000);
printf("%d",result);
return 0;
}