Cod sursa(job #159350)

Utilizator city_guy91alex isip city_guy91 Data 14 martie 2008 08:23:44
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
# include <stdio.h>
# include <vector>

using namespace std;

# define input "transport.in"
# define output "transport.out"

# define MAX 16005

int i,j,n,k,st,dr,mij;
int a[MAX];
int nr,s;

int main()
{
    freopen(input, "r", stdin);
    freopen(output, "w", stdout);

    scanf("%d%d",&n,&k);
    dr = 0;
    st = 0;
    for(i=1;i<=n;i++)
    {
       scanf("%d",&a[i]);
       dr+=a[i];
       if(a[i] > st)
           st = a[i];
    }
    while(st <= dr)
    {
             
             
                 mij=(st+dr)/2;  
/*
    s=0;  
    nr=0;  
   
       for(i=1;i<=n;i++){  
       s+=a[i];  
   
       if(s>mij){  
      s=0;  
      nr++;  
      i--;  
  
        }  
   
   
       }  
   
   
     if(s!=0){  
     nr++;  
     s=0;  
     } 
             
             
             */
             mij = (st + dr) >> 1;
             nr = 0;
             for(i=1;i<=n;)
             {
                 s = a[i];
                 for(i++;i<=n && s+a[i] <= mij;i++)  
                     s+=a[i];
                 nr ++;
            }
             if(nr <= k)
                dr = mij-1;
             else
                st = mij+1;
    }
    printf("%d",st);

    return 0;
}