Pagini recente » Cod sursa (job #943095) | Cod sursa (job #1840475) | Cod sursa (job #2479061) | Cod sursa (job #1720558) | Cod sursa (job #1415864)
#include <fstream>
#include <cstdio>
#define NM 16005
using namespace std;
int n, k, i, mx, v[NM];
int mid, sum, be, en;
int verif1(int x)
{
int nr=1;
int s=0;
for (i=1; i<=n; i++)
{
if (s+v[i]>x)
{
nr++;
s=v[i];
}
else
s+=v[i];
}
return nr;
}
bool verif(int x)
{
verif1(x);
if (verif1(x)>=k)
return true;
else
return false;
}
int cautbin()
{
be=max(sum, mx);
en=NM*NM;
int ans = NM*NM+1;
while (be<=en)
{
mid=(be+en) / 2;
if (verif(mid)==true)
{
if (verif1(mid)>k)
be=mid+1;
else
{
en=mid-1;
ans=mid;
}
}
else
en=mid-1;
}
return ans;
}
int main()
{
freopen("transport.in", "r", stdin);
freopen("transport.out", "w", stdout);
scanf("%d %d", &n, &k);
for (i=1; i<=n; i++)
{
scanf("%d", &v[i]);
mx=max(mx, v[i]);
sum+=v[i];
}
sum/=k;
if (max(sum, mx)>k)
printf("%d\n", cautbin());
else
printf("%d\n", max(sum, mx));
return 0;
}