Pagini recente » Cod sursa (job #3122558) | Cod sursa (job #2666298) | Cod sursa (job #700780) | Cod sursa (job #205505) | Cod sursa (job #1322432)
#include <cstdio>
#define MaxN 1 << 14
using namespace std;
FILE *fin=freopen("transport.in","r",stdin);
FILE *fout=freopen("transport.out","w",stdout);
int n, MaxG = MaxN * MaxN, k;
int v[MaxN];
void Read()
{
scanf("%d%d", &n, &k);
for(int i = 1; i <= n ; ++i)
scanf("%d", &v[i]);
}
inline int Check(int x)
{
int cnt = 0;
for(int i = 1, s = 0; i <= n; ++i)
{
if( v[i] > x )
return 0;
if( s + v[i] == x )
{
++cnt;
s = 0;
}
else if( s + v[i] > x )
{
++cnt;
s = v[i];
}
else
s += v[i];
}
if( cnt + 1 <= k )
return 1;
return 0;
}
void Solve()
{
int left = 0, right = MaxN, m;
while( left + 1 < right )
{
m = (left + right) >> 1;
if( Check(m) )
right = m;
else
left = m;
}
printf("%d", right);
}
int main()
{
Read();
Solve();
}