Cod sursa(job #331917)

Utilizator doru.nituNitu Doru Constantin doru.nitu Data 15 iulie 2009 19:48:51
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<stdio.h>

int a[16001],i,k,n,dr,st,max,s,mij,rez;

int verifica(int x)
{ 
    int i,sum=0,nr=0;
    for(i=1;i<=n;i++) { if(sum+a[i]<=x) sum+=a[i];
                        else if(sum+a[i]>x) { nr++;
                                              sum=a[i];
                                            } 
                      }
    nr++;
    if(nr<=k) return 1;
    return 0;
}                                              

int main()
{ 
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
    
    scanf("%d %d",&n,&k);
    
    for(i=1;i<=n;i++)  { scanf("%d",&a[i]);
                         if(a[i]>max) max=a[i];
                         s+=a[i];
                       }
    st=max;
    dr=s;                   
    while(st<=dr) { mij=(st+dr)/2;
                   if(verifica(mij)) { dr=mij-1;
                                       rez=mij;
                                     }
                   else st=mij+1;
                 } 
   printf("%d\n",rez);
   fclose(stdin);
   fclose(stdout);
   return 0;
}