Pagini recente » Diferente pentru probleme-de-acoperire-1 intre reviziile 36 si 35 | Monitorul de evaluare | Cod sursa (job #2510169) | Monitorul de evaluare | Cod sursa (job #1744186)
#include<iostream>
#include<fstream>
using namespace std;
int stiva[16001],varf,drumuri;
long long minim, maxim,nrmin;
int poate(long long n)
{
int varf1=varf-1;
for(int i=0;i<drumuri;i++)
{
long long capacitate=n;
while(capacitate>=0&&varf1>=0)
{
if(stiva[varf1]<=capacitate)
{capacitate=capacitate-stiva[varf1];
varf1--;}
else break;
}
}
if(varf1<0) return 1;
else return 0;
}
long long bin(long long st,long long dr)
{
if(st<dr)
{long long mij=(st+dr)/2;
if(poate(mij))
if(mij<nrmin)
nrmin=mij;
bin(st,mij);
bin(mij+1,dr);
}
return nrmin;
}
int main()
{
ifstream f("transport.in");
f>>varf;
f>>drumuri;
for(int i=0;i<varf;i++)
{
f>>stiva[i];
maxim=maxim+stiva[i];
}
nrmin=maxim;
ofstream g("transport.out");
g<<bin(minim,maxim);
}