Pagini recente » Cod sursa (job #925707) | Cod sursa (job #2916283) | Cod sursa (job #792210) | Cod sursa (job #3260141) | Cod sursa (job #2507622)
#include <iostream>
#include<fstream>
#define N 16005
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int n,k,sum,a[N];
int vmax;
void solve()
{
int i,st,dr,mij;
int sol,nr,s;
st=vmax;//capacitatea secventei trb neaparat>=vmax
dr=sum;
while(st<=dr)
{
mij=(st+dr)/2;
nr=1;
s=0;
//calculam cate secvente cu s<=mij ar fi
for(i=1;i<=n;++i)
{
s+=a[i];
if(s>mij)
{
nr++;
s=a[i];
}
}
// cout<<st<<" "<<mij<<" "<<dr<<" "<<nr<<"\n";
if(nr>k)//sunt mai mult de k secvente
{
//avem nevoie de o capacitate mai mare
st=mij+1;
}
else
{
//pastram solutia
sol=mij;
//dar verificam daca nu exista una si mai buna
dr=mij-1;
}
}
fout<<sol;
}
int main()
{
int i;
fin>>n>>k;
for(i=1;i<=n;++i)
{
fin>>a[i];
if(a[i]>vmax)vmax=a[i];
sum+=a[i];
}
solve();
return 0;
}