Pagini recente » Cod sursa (job #1411777) | Cod sursa (job #666805) | Cod sursa (job #2239947) | Cod sursa (job #997193) | Cod sursa (job #2078958)
#include<cstdio>
using namespace std;
int main(){
freopen("transport.in","r",stdin);
freopen("transport.out","w",stdout);
int i, n, k, valMax=-1, sumElem=0, a[16002];
scanf("%d%d", &n, &k);
for (i=1;i<=n;i++) {scanf("%d", &a[i]); if (valMax<a[i]) valMax=a[i]; sumElem+=a[i];}
int st=valMax, dr=sumElem, mij, sol=-1, 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 ((nrTrans==k)&&(valCrt>0)) posibil=false;
if (posibil) {sol=mij; dr=mij-1;} else st=mij+1;
}
if (sol<0) return 31337;
printf("%d\n", sol);
return 0;
}