Pagini recente » Istoria paginii runda/usor | Cod sursa (job #2224379) | Cod sursa (job #185789) | Cod sursa (job #1603651) | Cod sursa (job #509432)
Cod sursa(job #509432)
#include <cstdio>
const int N = 16005;
int n, a[N], k;
int rez(int g) {
int i, nr = 1, s = 0;
for( i = 1; i <= n; ++i)
if( a[i] >g)
return k + 1;
else
{
s += a[i];
if( s > g)
++nr, s = a[i];
}
return nr;
}
int cauta(int p, int u) {
int m = (p + u) / 2;
if( p == u && rez(m) <= k)
return p;
if(p > u )
return p;
// printf("%d %d %d %d\n",p,m,u,rez(m));
if( rez(m) <= k)
return cauta(p, m - 1);
else
return cauta(m + 1, u);
}
int main() {
freopen("transport.in", "r", stdin);
freopen("transport.out", "w", stdout);
int i;
scanf("%d %d", &n, &k);
for(i = 1; i <= n; ++i)
scanf("%d", &a[i]), a[n + 1] += a[i];
printf("%d\n", cauta(1,a[n + 1]));
return 0;
}