Pagini recente » Cod sursa (job #1000744) | Cod sursa (job #1127748) | Cod sursa (job #3281941) | Cod sursa (job #1477963) | Cod sursa (job #2292805)
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int n,k,maxim;
int v[16005];
int max(int a,int b)
{
return a>b?a:b;
}
int min(int a,int b)
{
return a>b?b:a;
}
bool gasit(int maxim)
{
int s=0,nr=0;
for (int i=0; i<n; i++)
{
if (s+v[i]<=maxim) s+=v[i];
else
{
s=v[i];
nr++;
}
}
if (nr<k) return true;
return false;
}
int main()
{
int s=0;
fin>>n>>k>>maxim;
v[0]=maxim;
for (int i=1; i<n; i++)
{
fin>>v[i];
if (v[i]>maxim) maxim=v[i];
s+=v[i];
}
int mij;
int st=maxim;
int dr=s;
while (st<=dr)
{
mij=(st+dr)/2;
if (gasit(mij))
{
maxim=mij;
dr=mij-1;
}
else st=mij+1;
}
fout<<maxim;
return 0;
}