Cod sursa(job #244016)
| Utilizator | Data | 14 ianuarie 2009 13:26:14 | |
|---|---|---|---|
| Problema | Transport | Scor | 0 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.51 kb |
#include<fstream.h>
ifstream f("transport.in");
ofstream g("transport.out");
int d=0,s=0,m,cp,sol,n,k,i,S[16001];
int capacitate(int x)
{
int nr=1,c=0;
i=1;
while(i<=n)
{
if(c+S[i]<=x)
c=c+S[i];
else
{
nr++;
c=S[i];
}
i++;
}
return nr;
}
int main(void)
{
f>>n>>k;
for(i=1;i<=n;i++)
{
f>>S[i];
if(S[i]>s)
s=S[i];
d+=S[i];
}
while(s<=d)
{
m=(s+d)/2;
cp=capacitate(m);
if(cp>k)
s=m+1;
else
{
if(sol>cp||sol==0)
sol=cp;
d=sol-1;
}
}
g<<sol<<'\n';
return 0;
}
