Pagini recente » Cod sursa (job #2153508) | Cod sursa (job #2373834) | Cod sursa (job #982966) | Cod sursa (job #449022) | Cod sursa (job #1057910)
#include<fstream>
using namespace std;
ifstream fin ( "transport.in" );
ofstream fout ( "transport.out" );
const int nmax = 16000;
int n, k;
int v[nmax];
bool check( int c )
{
int s, drumuri = 1;
s = 0;
for ( int i = 0; i<n; ++i ) {
if ( s+v[i]>c ) {
s = v[i];
++drumuri;
} else {
s += v[i];
}
}
return (drumuri<=k);
}
int main()
{
int mx, sum;
fin>>n>>k;
mx = 0;
sum = 0;
for ( int i = 0; i<n; ++i ) {
fin>>v[i];
if ( v[i]>mx )
mx = v[i];
sum += v[i];
}
// cautare binara intre mx si sum
int n2;
for ( n2 = 1; 2*n2<=sum; n2 *= 2 ) {
}
int sol, pas;
sol = sum+1;
for ( pas = n2; pas>0; pas /= 2 ) {
if ( sol-pas>=mx && check(sol-pas) )
sol -= pas;
}
fout<<sol<<'\n';
fin.close();
fout.close();
return 0;
}