Cod sursa(job #476903)

Utilizator mlazariLazari Mihai mlazari Data 12 august 2010 17:11:49
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
#include<fstream>

using namespace std;

#define NMAX 16000

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

int n,k,i,vmax,s;
int saltea[NMAX];

bool posibil(int cap) {
  int v=0,nt=0,i;
  for(i=0;i<n;++i) {
    if(v+saltea[i]>cap) {
      ++nt;
      if(nt==k) return false;
      v=0;
    }
    v+=saltea[i];
  }
  return true;
}

int cauta(int st,int dr) {
  int med;
  while(st<dr) {
    med=st+(dr-st)/2;
    if(posibil(med)) dr=med;
    else st=med+1;
  }
  return st;
}

int main() {
  fi>>n>>k;
  for(i=0;i<n;++i) {
    fi>>saltea[i];
    s+=saltea[i];
    if(saltea[i]>vmax) vmax=saltea[i];
  }
  fo<<cauta(vmax,s);
  return 0;
}