Pagini recente » Cod sursa (job #1921061) | Cod sursa (job #2138534) | Cod sursa (job #1613895) | Cod sursa (job #2278267) | Cod sursa (job #2491804)
#include <fstream>
using namespace std;
ifstream in ("transport.in");
ofstream out ("transport.out");
int v[16001];
int n,k,max1;
long long sum;
bool verif (int cant)
{
int sum=0,i,zile=1;
for (i=1;i<=n;i++)
{
if (sum+v[i]<=cant)
sum+=v[i];
else if (v[i]>cant)
return 0;
else if (sum+v[i]>cant)
zile++,sum=v[i];
}
if (zile<=k)
return 1;
return 0;
}
int cautare(int st,long long dr)
{
int pos,mijl;
while (st<=dr)
{
mijl=(st+dr)/2;
if (verif(mijl)==1)
{
pos=mijl;
dr=mijl-1;
}
else
st=mijl+1;
}
return pos;
}
int main()
{
in>>n>>k;
for (int i=1;i<=n;i++)
in>>v[i],sum+=v[i],max1=max(max1,v[i]);
out<<cautare(max1,sum);
return 0;
}