Pagini recente » Profil sboicea | Diferente pentru problema/dedicatie intre reviziile 47 si 48 | Diferente pentru utilizator/mihaipriboi intre reviziile 32 si 33 | Monitorul de evaluare | Cod sursa (job #3260219)
#include <iostream>
#include <fstream>
using namespace std;
int v[16000];
int f(int volum, int n)
{
int nr_transport=1, suma=0;
for(int i=0; i<n; i++)
{
if(suma+v[i]>volum)
{
nr_transport++;
suma=0;
}
suma+=v[i];
}
if(suma>volum)
nr_transport++;
return nr_transport;
}
int main()
{
ifstream cin("transport.in");
ofstream cout("transport.out");
int n, k, st=0, dr=0;
cin >> n >> k;
for(int i=0; i<n; i++)
{
cin >> v[i];
if(v[i]>st) st=v[i];
dr+=v[i];
}
int mij, ans;
while(st<=dr)
{
mij=st+(dr-st)/2;
if(f(mij, n)<=k) {dr=mij-1; ans=mij;}
else st=mij+1;
//cout << st << " " << mij << " " << dr << " " << f(mij, n) << "\n";
}
cout << ans;
return 0;
}