Cod sursa(job #1886327)

Utilizator Ioana_AndreeaCristescu Ioana Ioana_Andreea Data 20 februarie 2017 20:28:00
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
using namespace std;

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


const int NMax = 16005;
int N,K,Max,Sol = -1,S;
int X[NMax];

void Read()
{
  fin >> N >> K;
  for(int i = 1; i <= N; ++i)
    {
      fin >> X[i];
      Max = max(Max,X[i]);
      S += X[i];
    }

}

int Check(int Value)
{
  int Nr = 0, Sum = 0;
  for(int i = 1; i <= N; ++i)
    {
        if(Sum + X[i] <= Value)
          Sum += X[i];
        else
          {
            Sum = X[i];
            Nr++;
          }
    }

  return (Nr <= K);
}

void Solve()
{
  int Left = Max, Right = S;
  while(Left <= Right)
    {
      int Mid = (Left + Right) / 2;
      if(Check(Mid))
        {
          Sol = Mid;
          Right = Mid - 1;
        }
      else
        Left = Mid - 1;
    }
}

void Print()
{
  fout << Sol << "\n";
}

int main()
{
    Read();
    Solve();
    Print();
    return 0;
}