Pagini recente » Cod sursa (job #1098688) | Cod sursa (job #2186264) | Cod sursa (job #167785) | Cod sursa (job #2550268) | Cod sursa (job #2366612)
#include <iostream>
#include <fstream>
const int MAXN = 16000 + 5;
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
int n,k,v[MAXN];
bool ok(long long x){
long long suma = 0;
int numar_transporturi = 0;
for(int i = 1; i <= n; i++){
if(v[i] > x)
return false;
if(suma + v[i] > x){
suma = 0;
numar_transporturi++;
}
suma += v[i];
}
if(suma)
numar_transporturi++;
return (numar_transporturi <= k);
}
long long cautbin(){
long long pas = 1LL<<60,r = 0;
while(pas){
if(!ok(r + pas))
r += pas;
pas /= 2;
}
return r + 1;
}
int main()
{
in>>n>>k;
for(int i = 1; i <= n; i++)
in>>v[i];
out<<cautbin();
return 0;
}