Cod sursa(job #2579662)

Utilizator sipdavSipos David Oliver sipdav Data 12 martie 2020 18:32:26
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("transport.in");
ofstream out("transport.out");

const int oo = (int) (1e9);

int n, k, v[16010],st, dp, m, mx, s;

bool bun(int r)
{
    int i = 1, j = 0, t = 0;
    while(i <= n)
    {
        if(t + v[i] <= r)
            t += v[i];
        else
        {
            t = v[i];
            j++;
        }
        i++;
    }
    return j < k;
}

int main()
{
    in>>n>>k;
    mx = -oo;
    s = 0;
    for(int i = 1;i <= n;i++)
    {
        in>>v[i];
        s += v[i];
        mx = max(mx, v[i]);
    }
    if(k == 1)
        out<<s;
    else
    {
        st = mx;
        dp = s;
        while(st <= dp)
        {
            m =(st + dp) / 2;
            if(bun(m))
                dp = m - 1;
            else
                st = m + 1;
        }
        out<<st;
    }
    return 0;
}