Pagini recente » Cod sursa (job #3343867) | Cod sursa (job #1105600) | Cod sursa (job #3352684) | Borderou de evaluare (job #2706518) | Cod sursa (job #3345740)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
#define pb push_back
#define ll long long
#define INF 1e9
int n,k,st[16006],maxi,sum;
bool check(int cap){
int i = 1;
int curr = 0;
int transportsUsed = 1;
while(i <= n && transportsUsed <= k){
if(curr + st[i] > cap){
transportsUsed++;
curr = st[i];
}else curr += st[i];
i++;
}
return transportsUsed <= k;
}
int main() {
fin >> n >> k;
maxi = 0;
sum = 0;
for(int i=n;i>=1;i--){
fin >> st[i];
maxi = max(maxi,st[i]);
sum += st[i];
}
int l = maxi, r = sum,rez=-1;
while(l<=r){
int mid = (l+r)/2;
// try potential cap.
if(check(mid)){
r = mid - 1;
rez = mid;
}else l = mid + 1;
}
fout << rez;
return 0;
}