Cod sursa(job #2208551)

Utilizator Fantastic_Mantudor voicu Fantastic_Man Data 30 mai 2018 12:56:43
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <iostream>
#include <cstdio>
using namespace std;
int v[16001];
int main()
{
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
    int n,i,k,st,dr,r,max=0,s,sum=0,m,cate;
    scanf("%d%d",&n,&k);
    for(i=1;i<=n;i++) {
        scanf("%d",&v[i]);
        if(v[i]>max)
            max=v[i];
        sum+=v[i];

    }
    st=max;
    dr=sum;
    while(st<=dr) {
        m=(st+dr)/2;
        s=0;
        cate=1;
        for(i=1;i<=n;i++) {
            if(s+v[i]>m) {
                cate++;
                s=v[i];
            }
            else
                s+=v[i];
        }
        if(cate>k)
            st=m+1;
        else {
            r=m;
            dr=m-1;
        }
    }
    cout<<r;

    return 0;
}