Pagini recente » Cod sursa (job #2965625) | Cod sursa (job #64601) | Cod sursa (job #2410245) | Cod sursa (job #951742) | Cod sursa (job #799582)
Cod sursa(job #799582)
#include<iostream>
#include<fstream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
int sum,n,k,i,j,pas,x[16001],smax,ssmax;
bool test(int y);
int caut();
int main() {
in>>n;
in>>k;
for (i=1;i<=n;++i) {
in>> x[i];
sum+=x[i];
if (x[i]>smax) smax=x[i];
}
out<< caut();
in.close();
out.close();
return 0;
}
int caut() {
int j,pas=1<<28;
while (pas<=sum-smax) pas*=2;
pas/=2;
for (j=0;pas!=0;pas/=2) {
if (!test(j+pas))
j+=pas;
}
return 1+j;
}
bool test(int y) {
int nr=1,cap=0;
for (int i=1;i<=n;++i) {
if(x[i]>y)
return false;
if (cap+x[i]>y) {
cap=0;
++nr;
}
cap+=x[i];
if(nr>k)
return false;
}
return true;
}