Pagini recente » Cod sursa (job #1464155) | Cod sursa (job #2917430) | Cod sursa (job #84089) | Cod sursa (job #1477082) | Cod sursa (job #1801702)
#include<iostream>
#include<cstdio>
using namespace std;
int sum, k, n, maxx, v[16007];
bool check(int val)
{
int ct = 1, s = 0;
for(int i = 1; i <= n; ++i)
{
if(s + v[i] <= val)
{
s += v[i];
}
else
{
++ct;
if(ct > k) return 0;
s = v[i];
}
}
if(ct <= k) return 1;
}
int cautbin(int x)
{
int pas = 1, start = maxx - 1;
for(; pas <= x; pas <<= 1);
for(; pas; pas>>=1)
{
if(start + pas > x) continue;
if(check(start + pas) == 0) start += pas;
}
return start;
}
int main()
{
FILE* in = fopen("transport.in", "r");
FILE* out = fopen("transport.out", "w");
fscanf(in, "%d%d", &n, &k);
for(int i = 1; i <= n; ++i)
{
fscanf(in, "%d", &v[i]);
maxx = max(maxx, v[i]);
sum += v[i];
}
fprintf(out, "%d", cautbin(sum) + 1);
}