Pagini recente » Cod sursa (job #49881) | Cod sursa (job #2503380) | Cod sursa (job #2456635) | Cod sursa (job #2522812) | Cod sursa (job #3260333)
#include <iostream>
#include <fstream>
using namespace std;
int v[16001];
int N,K;
ifstream f("transport.in");
ofstream g("transport.out");
bool verificare(int m){
int sum=0,gr=K;
for(int i=1;i<=N;i++){
sum+=v[i];
if(sum>m){
gr--;
if(gr==0) return false;
sum=v[i];
}else if(sum==m){
gr--;
if(gr==0){
if(i==N) return true;
else return false;
}
sum=0;
}
}
return true;
}
int cb(int p,int u){
int m,poz;
while(p <=u){
m=(p+u)/2;
if(verificare(m)==false){
p=m+1;
}else{
u=m-1;
poz=m;
}
}
return poz;
}
int main()
{
int smax=0,sum=0;
f >> N >> K;
for(int i=1;i<=N;i++){
f >> v[i];
if(v[i]>smax) smax = v[i];
sum+=v[i];
}
g << cb(smax,sum);
return 0;
}