Pagini recente » Cod sursa (job #727188) | Cod sursa (job #1863638) | Cod sursa (job #1143081) | Cod sursa (job #2526908) | Cod sursa (job #1494253)
#include <cstdio>
using namespace std;
int v[16005] ;
int max ( int a , int b )
{
if ( a <= b )
return b ;
return a ;
}
int verif ( int p , int n , int k )
{
int x = 1, c , i ;
c = v[1] ;
for ( i = 2; i <= n ; i ++ )
{
if(c + v[i] <= p)
c += v[i];
else
{
c = v[i];
x ++ ;
}
}
if ( x <= k )
return 1 ;
return 0 ;
}
int cb ( int st, int dr , int n , int k )
{
int med , rez ;
while(st <= dr)
{
med = (st + dr) / 2 ;
if ( verif ( med , n , k ))
{
rez = med ;
dr = med - 1 ;
}
else
st = med + 1 ;
}
return rez ;
}
int main()
{
int n , k , i , s = 0 , y = 0 ;
freopen ( "transport.in" , "r" , stdin ) ;
freopen ( "transport.out" , "w" , stdout ) ;
scanf ( "%d%d" , &n , &k ) ;
for( i = 1 ; i <= n ; ++ i )
{
scanf ( "%d" , &v[i] ) ;
s += v[i] ;
y = max ( y , v[i]);
}
printf ( "%d\n" , cb ( y , s , n , k ) );
return 0;
}