Pagini recente » Cod sursa (job #397849) | Cod sursa (job #2783046) | Cod sursa (job #1453064) | Cod sursa (job #1636475) | Cod sursa (job #7871)
Cod sursa(job #7871)
#include <stdio.h>
#define input "transport.in"
#define output "transport.out"
#define nmax 20000
long n,nt,sol,nc,g[nmax],c[nmax],i,s[nmax],maxim=0;
int citire()
{
FILE *fin;
fin=fopen(input,"r");
fscanf(fin,"%d %d",&n,&nt);
for (i=1;i<=n;i++)
{
fscanf(fin,"%d",&c[i]);
if (c[i]>maxim) maxim=c[i];
}
fclose(fin);
return 0;
}
int afisare()
{
FILE *fout;
fout=fopen(output,"w");
fprintf(fout,"%d",sol);
fclose(fout);
return 0;
}
int solve()
{
long k,ls=maxim,ld=nmax;
sol=nmax;
while (ls<=ld)
{
k=(ls+ld)/2;
nc=1;
g[1]=c[1];
for (i=2;i<=n;i++)
if (k-g[nc]>=c[i]) g[nc]+=c[i];
else g[++nc]=c[i];
//nc este numarul de cutii gasit
//nt este numarul de cutii maxim
//ls, ld, k
if (nc<=nt)
{sol=k; ld=k-1;}
else ls=k+1;
}
return 0;
}
int main()
{
citire();
solve();
afisare();
return 0;
}