Pagini recente » Cod sursa (job #2877438) | Cod sursa (job #1568921) | Cod sursa (job #509075) | Cod sursa (job #2959900) | Cod sursa (job #2078953)
#include<cstdio>
using namespace std;
int main(){
freopen("transport.in","r",stdin);
freopen("transport.out","w",stdout);
int i, n, k, valMax=-1, a[16002];
scanf("%d%d", &n, &k);
for (i=1;i<=n;i++) {scanf("%d", &a[i]); if (valMax<a[i]) valMax=a[i];}
int st=valMax, dr=valMax*n, mij, sol=valMax*n, nrTrans, valCrt;
bool posibil;
while (st<dr) {
mij=st+(dr-st)/2;
nrTrans=0; valCrt=0; posibil=true;
for (i=1;i<=n;i++) {
if (valCrt+a[i]<=mij) valCrt+=a[i]; else {
valCrt=a[i]; nrTrans++;
if (nrTrans>k) {posibil=false; break;}
}
}
if (posibil) {sol=mij; dr=mij-1;} else st=mij+1;
}
printf("%d\n", sol);
return 0;
}