Pagini recente » Cod sursa (job #1095704) | Cod sursa (job #1688824) | Borderou de evaluare (job #1019904) | Cod sursa (job #3267902) | Cod sursa (job #1564900)
#include <cstdio>
#define MAX 16000
using namespace std;
int v[MAX+1];
int min(int a, int b)
{
if(a<b)
return a;
return b;
}
int max(int a, int b)
{
if(a>b)
return a;
return b;
}
int main()
{
freopen("transport.in", "r", stdin);
freopen("transport.out", "w", stdout);
long long s=0, n, k, i, st, dr, mij, maxi=-1, cam, curent, minim;
scanf("%lld%lld", &n, &k);
for(i=1;i<=n;i++)
{
scanf("%d", &v[i]);
s+=v[i];
maxi=max(maxi, v[i]);
}
st=maxi;
dr=s;
minim=s;
while(st<=dr)
{
cam=1;
curent=0;
mij=(st+dr)/2;
for(i=1;i<=n;i++)
{
if(curent+v[i]<=mij)
curent+=v[i];
else{ cam++; curent=v[i];};
}
if(cam<=k)
{
minim=min(minim, mij);
dr=mij-1;
}
else st=mij+1;
}
printf("%lld", minim);
return 0;
}