Pagini recente » Cod sursa (job #2637202) | Cod sursa (job #1150532) | Cod sursa (job #2061990) | Cod sursa (job #1139794) | Cod sursa (job #977242)
Cod sursa(job #977242)
#include<cstdio>
#include <fstream>
using namespace std;
int minim,maxim, v[16005], p, u, s, mij, n, k, i;
FILE *fin=fopen("transport.in", "r");
ofstream fout("transport.out");
int trece(int g){
//testam daca cu capacitatea g pute realiza k transporturi
if (maxim > g)
return 0;
int t=0;
int cc=0;
for(int i=1; i<=n; i++){
if(cc>=v[i])
cc-=v[i];
else{
t++;
cc=g-v[i];
}
if(t>k)
break;
}
if(t<=k)
return 1;
else
return 0;
}
int main(){
minim=16002;
maxim = 0;
fscanf(fin,"%d%d",&n, &k);
for(i=1; i<=n; i++){
fscanf(fin, "%d", &v[i]);
if(v[i]<minim)
minim=v[i];
if(v[i]>maxim)
maxim=v[i];
s+=v[i];
}
p=minim; u=s;
while(p<=u){
mij=p+(u-p)/2;
if(trece(mij)){
u=mij-1;
}
else{
p=mij+1;
}
}
fout<<p;
return 0;
}