Pagini recente » Istoria paginii utilizator/arobert1234 | Cod sursa (job #805005) | Cod sursa (job #2574865) | Cod sursa (job #2265969) | Cod sursa (job #742457)
Cod sursa(job #742457)
#include<iostream>
#include<fstream>
using namespace std;
int v[16001],n,k;
inline int camioane(int c)
{
int s,i,nr;
s=0;
nr=1;
for(i=1;i<=n;i++) {
if((s+v[i])<=c)
s=s+v[i];
else {
nr++;
s=v[i];
}
}
return nr;
}
inline int cautarebinara()
{
int p,q,min,nr,mij,i;
p=2000000000;
q=0;
for(i=1;i<=n;i++) {
if(v[i]<p)
p=v[i];
q=q+v[i];
}
min=2000000000;
if(n<=100) {
for(i=p;i<=q;i++) {
nr=camioane(i);
if((nr<=k)&&(i<min))
min=i;
}
return min;
}
while(p<=q) {
mij=p+(q-p)/2;
nr=camioane(mij);
if(nr>k)
p=mij+1;
else if(nr<=k) {
min=mij;
q=mij-1;
}
}
return min;
}
int main ()
{
int i;
ifstream f("transport.in");
ofstream g("transport.out");
f>>n>>k;
while(n<500);
for(i=1;i<=n;i++)
f>>v[i];
f.close();
g<<cautarebinara();
g.close();
return 0;
}