Pagini recente » Cod sursa (job #490087) | Cod sursa (job #2804740) | Cod sursa (job #1442574) | Cod sursa (job #2904244) | Cod sursa (job #2274714)
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int n,k,i,j,v[17000];
long long t,transporturi,incarcat,maxim, capacitate, sumaTotala, st, dr;
int main () {
fin>>n>>k;
for (i=1;i<=n;i++) {
fin>>v[i];
sumaTotala += v[i];
if (v[i]>maxim)
maxim=v[i];
}
st = maxim;
dr = sumaTotala;
while(st <= dr) {
int capacitate = (st + dr)/2;
transporturi=1;
incarcat=0;
for (i=1;i<=n;i++) {
incarcat+=v[i];
if (incarcat>capacitate) {
incarcat=v[i];
transporturi++;
}
}
if (transporturi<=k) {
dr = capacitate-1;
} else
st = capacitate+1;
}
fout<<st;
/*
for (capacitate=maxim; ;capacitate++) {
transporturi=1;
incarcat=0;
for (i=1;i<=n;i++) {
incarcat+=v[i];
if (incarcat>capacitate) {
incarcat=v[i];
transporturi++;
}
}
if (transporturi<=k) {
fout<<capacitate;
return 0;
}
}
*/
}
/*
k = 4
capacitate 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
transporturi NU 30 30 28 27 24 20 20 19 18 16 16 10 8 4 3 1 1
*/