Pagini recente » Cod sursa (job #2353471) | Cod sursa (job #2378511) | Cod sursa (job #2965103) | Cod sursa (job #2628492) | Cod sursa (job #2418711)
#include <fstream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
const int N = 16000*16000+10;
int n,k,greutate_totala,gr_max,a[16001],st=1,dr=N,mij,i;
bool check_capacity(int c)
{
int x=0,transporturi=0;
for (int i=1; i<=n; ++i)
{
x+=a[i];
if (x>c) transporturi++,x=a[i];
else if (x==c) transporturi++,x=0;
if (transporturi>k) return false;
}
if (x) transporturi++;
if (transporturi<=k) return true;
return false;
}
int main()
{
in>>n>>k;
for (i=1; i<=n; ++i)
{
in>>a[i];
greutate_totala+=a[i];
gr_max=max(gr_max,a[i]);
}
if (k==1) out<<greutate_totala<<"\n";
else if (k>=n) out<<gr_max<<"\n";
else
{
while (st<dr)
{
mij=(st+dr)/2;
if (mij>=gr_max && check_capacity(mij))
dr=mij;
else
st=mij+1;
}
out<<dr<<"\n";
}
}