Pagini recente » Cod sursa (job #3283995) | Cod sursa (job #152754) | Cod sursa (job #2556709) | Cod sursa (job #1369287) | Cod sursa (job #2713115)
#include <fstream>
using namespace std;
ifstream cin("transport.in");
ofstream cout("transport.out");
int v[16001];
int main()
{
int n,k,i,sol,st,dr,s,nrt,cap;
cin>>n>>k;
st=0;/// volumul maxim al unei saltele ==> cazul in care fiecare saltea este dusa la un singur transport
dr=0;/// toate saltelele sunt duse la un singur transport suma tuturor saltelelor
/// capacitatea camionului ceruta de problema este in intervalul [st,dr]
for(i=1;i<=n;i++)
{
cin>>v[i];
if(v[i]>st)
st=v[i];
dr=dr+v[i];
}
sol=-1;
while(st<=dr)
{
cap=(st+dr)/2;
nrt=1;
s=0;
for(i=1;i<=n;i++)
{
if(s+v[i]<=cap) /// salteaua curenta intra in transport
s=s+v[i];
else
{
nrt++;/// salteaua curenta nu intra in transportul anterior
s=v[i];
}
}
if(nrt>k)
st=cap+1;
else
{
sol=cap;
dr=cap-1;
}
}
cout<<sol;
return 0;
}