Pagini recente » Cod sursa (job #84186) | Cod sursa (job #15476) | Cod sursa (job #1715357) | Cod sursa (job #1754755) | Cod sursa (job #2091142)
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n, k, volum[16050];
long long int lg = 1, suma[16050];
bool transpo(long long int x)
{
long long int s, i, lg1;
int poz = 0;
bool ok = 0;
for(int aux = 0; aux<k; aux++)
{
s = x;
i = 0;
lg1 = lg;
for(; lg1!=0; lg1>>=1)
if(suma[i+lg1]<=suma[n] && suma[i+lg1]-suma[poz]<=s)
i+=lg1;
if(i!=n)
{
poz = i;
}
if(i == n)
{
ok = 1;
break;
}
}
return ok;
}
void log(long long int lg2)
{
long long int i = 0;
for(; i<suma[n]; i++)
if(transpo(i) == 1)
{
printf("%d", i);
return;
}
}
void rez()
{
memset(suma, 100, sizeof(suma));
suma[0] = 0;
for(int i = 1; i<=n; i++)
{
scanf("%d\n", &volum[i]);
suma[i] = suma[i-1]+volum[i];
}
while(lg<suma[n])
lg=(lg<<1);
log(lg);
}
int main()
{
freopen("transport.in", "r", stdin);
freopen("transport.out", "w", stdout);
scanf("%d %d\n", &n, &k);
rez();
return 0;
}