Pagini recente » Cod sursa (job #2859490) | Cod sursa (job #2246574) | Cod sursa (job #2400201) | Cod sursa (job #3263869) | Cod sursa (job #3001457)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
const int NMAX = 16005;
const int INF = (1<<29);
int a[NMAX],n,k,maxim=0;
int sol;
bool verific(int nr){
int sum = 0;
int nr_transporturi = 1;
for(int i=1;i<=n;i++){
if(sum+a[i] <= nr){
sum+=a[i];
} else {
nr_transporturi++;
sum=a[i];
}
}
if(nr_transporturi > k) return false;
return true;
}
void cautare_binara(int st,int dr){
while(st<=dr){
int mij=(st+dr)/2;
bool ok = verific(mij);
if(ok==true){
dr=mij-1;
sol = mij;
} else st=mij+1;
}
}
int main() {
fin >> n >> k;
for(int i=1;i<=n;i++){
fin >> a[i];
if(a[i]>maxim) maxim=a[i];
}
cautare_binara(maxim,INF);
fout << sol;
return 0;
}