Cod sursa(job #642149)

Utilizator idomiralinIdomir Alin idomiralin Data 30 noiembrie 2011 16:47:12
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
# include <cstdio>

using namespace std;
 
int a[16005];
int k, n, max, sum, rez, cap;
int ok(int val)
{
    int s = 0, i, ct = 1;
    for (i = 1; i <= n; i++)
    if (a[i] + s <= val) s += a[i];
                 else { ct++; s = a[i];}
    
    if (ct <= k) return 1;
           else return 0;
}

int main()
{int i;
    
    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];
        sum += a[i];
        }
    
    while (max <= sum)
    {
          cap = (max + sum) / 2;
          if (ok(cap)) {rez = cap; sum = cap - 1;}
                  else max = cap + 1;
                  }    
    
    printf("%d", rez);
    
return 0;
}