Pagini recente » Cod sursa (job #2408071) | Cod sursa (job #2710546) | Cod sursa (job #1335614) | Cod sursa (job #697965) | Cod sursa (job #2334964)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("transport.in");
ofstream fout ("transport.out");
const int NMAX=1e3*16+5;
int n,m,v[NMAX],k,maxElem,ans,sumMax;
int Max()
{
int maxim=v[1];
for(int i=2;i<=n;i++)
if(maxim<v[i]) v[i]=maxim;
return maxim;
}
int suma()
{
int sum=0;
for(int i=1;i<=n;i++) sum+=v[i];
return sum;
}
void citire()
{
fin>>n>>k;
for(int i=1;i<=n;i++) fin>>v[i];
maxElem=Max();
sumMax=suma();
}
int solutie(int x)
{
int i=1,transp=0;
//fout<<"** "<<x<<endl;
while(i<=n)
{
int suma=0;
while(i<=n)
{
// fout<<"i= "<<i<<endl;
if(suma+v[i]>x)
{
transp++;
break;
}
else
{
// fout<<v[i]<<" ";
suma+=v[i];
i++;
if(i==n+1) transp++;
}
}
// fout<<endl<<suma<<endl<<endl;
}
i--;
//fout<<"transp= "<<transp<<" i= "<<i<<endl<<endl;
if(i<n || transp>k) return -1;
return 1;
}
void cautBin()
{
int st=maxElem,dr=sumMax,mij;
while(st<=dr)
{
mij=st+(dr-st)/2;
if(solutie(mij)==1)
{
ans=mij;
dr=mij-1;
}
else st=mij+1;
}
fout<<ans;
}
int main()
{
citire();
cautBin();
//solutie(9);
return 0;
}