Pagini recente » Cod sursa (job #611674) | Cod sursa (job #1968275)
#include <fstream>
#define MAX 16000*16000 ///pt k=1, n=16000, toate volumele=16000
using namespace std;
ifstream fi("transport.in");
ofstream fo("transport.out");
int n,k,x[16001],i,j,st,dr,mij;
int ok(int cap)
{
///e ok capacitatea cap
int curent=0,transporturi=1;
for (int i=1; i<=n; i++)
{
if (curent+x[i]<=cap)
curent+=x[i];
else
{
if (x[i]>cap)
return 0;
curent=x[i];
transporturi++;
}
}
return transporturi<=k;
}
int main()
{
fi>>n>>k;
for (i=1; i<=n; i++)
fi>>x[i];
///cautam binar minimul necesar de la 1 la MAX
st=0,dr=MAX;
while (dr-st>1)
{
mij=(st+dr)/2;
if (!ok(mij))
st=mij;
else
dr=mij;
}
///rezultatul = dr
fo<<dr;
fi.close();
fo.close();
return 0;
}