Cod sursa(job #1405502)
Utilizator | Data | 29 martie 2015 12:20:31 | |
---|---|---|---|
Problema | Transport | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.71 kb |
#include <cstdio>
int v[16005],i,n,nr,Nr,Max;
long long s,st,dr,mij,sol;
int main()
{
freopen("transport.in","r",stdin);
freopen("transport.out","w",stdout);
scanf("%d%d",&n,&Nr);
for (i=1; i<=n; i++)
{
scanf("%d",&v[i]);
dr=dr+v[i];
if (v[i]>Max) Max=v[i];
}
st=Max;
while (st<=dr)
{
mij=(st+dr)/2;
nr=1;
s=0;
for (i=1; i<=n; i++)
if (s+v[i]<=mij) s+=v[i];
else
{
s=v[i];
nr++;
}
if (nr<=Nr)
{
sol=mij;
dr=mij-1;
}
else st=mij+1;
}
printf("%d\n",sol);
return 0;
}