Pagini recente » Cod sursa (job #3173166) | Cod sursa (job #2489191) | Cod sursa (job #1845700) | Cod sursa (job #2869474) | Cod sursa (job #2157517)
#include <cstdio>
using namespace std;
int v[16005];
bool ok(int c, int n, int k)
{
int s = 0, p = 0;
for(int i = 0; i < n; i++)
{
s += v[i];
if(v[i] > c) return 0;
if(s == c) { s = 0; p++; }
if(s > c) { i--; s = 0; p++; }
}
return p + (s >= 0) <= k;
}
int main()
{
int n, k, st = 0, dr = 0, med;
scanf("%d%d", &n, &k);
for(int i = 0; i < n; i++)
{
scanf("%d", &v[i]);
dr += v[i];
}
while(st <= dr)
{
med = (st + dr) / 2;
if(ok(med, n, k)) dr = med - 1;
else st = med + 1;
}
printf("%d", (st + dr) / 2 + 1);
return 0;
}