Cod sursa(job #1309009)

Utilizator obidanDan Ganea obidan Data 5 ianuarie 2015 05:32:51
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <iostream>
#include <fstream>
using namespace std;
const int NMax = 16000;

int S[NMax];
int n,k;
int VolMinim;

bool CanDo(int m)
{
    int q=1,i,sum=0;
    for(i=1;i<=n;i++)
    {
        if(S[i] > m) return 0;
        sum = sum + S[i];
        if(sum > m)
        {
            q++; sum = S[i];
        }
    }
    if(q <= k ) return 1;
    return 0;

}

void CautBin()
{
    int lo = 0, hi = 18000;
    int m;
    while(hi - lo > 1)
    {
        m = (lo + hi)/2;
        if(CanDo(m))
        {
            cout<<m<<endl;
            hi = m;
           if(VolMinim > m) VolMinim = m;
        }
        else
        {
            lo = m;
        }
    }

}


int main()
{
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
    cin>>n>>k;
    for(int i=1;i<=n;i++)
        cin>>S[i];
    VolMinim = 18000;
    CautBin();
    cout<<VolMinim;


}