Pagini recente » Cod sursa (job #24133) | Cod sursa (job #2766449) | Cod sursa (job #2805575) | Cod sursa (job #2837449) | Cod sursa (job #2910792)
#include <iostream>
#include <fstream>
#define MAX 16002
using namespace std;
int n,k,v[MAX],st,dr;
ifstream fin("transport.in");
ofstream fout("transport.out");
bool verif(int val){
int cnt = 1, sum = 0;
for(int i = 1; i <= n; i++){
if(sum + v[i] <= val){
sum += v[i];
}else{
cnt++;
sum = v[i];
}
}
return (cnt <= k);
}
int main()
{
fin >> n >> k;
for(int i = 1; i <= n; i++){
fin >> v[i];
st = min(st, v[i]);
dr += v[i];
}
/// 0 0 0 0 1 1 1 1
/// ^
/// filtru = nr de transporturi <= k
/// val per trans ++
/// nr trans --
int ans = 0;
while(st <= dr){
int mid = (st+dr)/2;
if(verif(mid)){
ans = mid;
dr = mid-1;
}else{
st = mid+1;
}
}
fout << ans;
return 0;
}