Pagini recente » Cod sursa (job #951919) | Cod sursa (job #2854090) | Cod sursa (job #1035792) | Cod sursa (job #2740246) | Cod sursa (job #2875554)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int profu(int m,int n,int a[]){
int s=0,cnt=0;
for(int i=1;i<=n;i++){
if(s+a[i]>m)s=a[i],cnt++;
else s=a[i];
}
if(s>0)cnt++;
return cnt;
}
int main() {
//cap minima = max(cap minima,a[i])
// cap max <=> k=1 => cam minima = S(a[i]) (i = 1,...,n);
int n,mij,k,maxi(0),st=-1,ans,dr(0),s(0),a[16500];
fin >> n >> k;
for(int i=1;i<=n;++i)fin>>a[i],st=max(st,a[i]),dr+=a[i];
for(int i=1;i<=n;i++){
while(st<=dr){
mij=(st+dr)/2;
if(profu(mij,n,a)<=k)ans=mij,dr=mij-1;
else st=mij+1;
}
}
fout << st+1;
return 0;
}