Pagini recente » Cod sursa (job #3201287) | Cod sursa (job #1652397) | Cod sursa (job #2581627) | Cod sursa (job #3259788) | Cod sursa (job #2924293)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("transport.in");
ofstream out("transport.out");
#define MAX_N 16000
int v[MAX_N+1],cap[MAX_N*MAX_N+1];
int n,k,maxi=-1,sumi=0,c;
void verif(bool& ok){
int nr=1,s=0;
for(int i=1;i<=n;i++){
if(s+v[i]>c){
s=v[i];
nr++;
}
else{
s+=v[i];
}
}
if(nr>k){
ok=false;
}
}
int main(){
in>>n>>k;
for(int i=1;i<=n;i++){
in>>v[i];
if(v[i]>maxi){
maxi=v[i];
}
sumi+=v[i];
}
for(int i=0;i<=sumi-maxi;i++){
cap[i]=i+maxi;
}
int f=sumi-maxi+1;
int st=1,dr=f,rez=-1;
while(st<=dr){
int mij=(st+dr)/2;
bool ok=true;
c=cap[mij];
verif(ok);
if(ok==false){
st=mij+1;
}
else{
rez=cap[mij];
dr=mij-1;
}
}
out<<rez;
}