Pagini recente » Cod sursa (job #444246) | Cod sursa (job #691730) | Cod sursa (job #686509) | Cod sursa (job #2681233) | Cod sursa (job #1009116)
#include <fstream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
const int nmax= 16000;
int n,k;
int v[nmax+1];
bool check(int x)
{
int sol=1,aux=0;
for(int i=1;i<=n;++i ) {
if (aux+v[i]<=x) {
aux+=v[i];
} else {
++sol;
aux=v[i];
}
}
return sol<=k;
}
int main( )
{
in>>n>>k;
int sol_max=0,sol_min=0;
for(int i=1;i<=n;++i ) {
in>>v[i];
if( v[i]>sol_min ) {
sol_min= v[i];
}
sol_max+= v[i];
}
int step;
for ( step= 1; step<=sol_max; step*=2 );
int sol;
for ( sol= sol_max; step>0; step/=2 ) {
if ( sol-step>=sol_min && check(sol-step)==1 ) {
sol-= step;
}
}
out<<sol<<"\n";
return 0;
}