Pagini recente » Cod sursa (job #2064758) | Cod sursa (job #2549369) | Cod sursa (job #1775922) | Cod sursa (job #538556) | Cod sursa (job #518688)
Cod sursa(job #518688)
#include <cstdio>
using namespace std;
#define nmax 16001
int n, k, valmin, valmax, sol;
int st[nmax];
void citire()
{
int val, vf;
freopen("transport.in","r",stdin);
scanf("%d %d", &n, &k);
vf=n;
for(int i=1; i<=n; i++)
{
scanf("%d", &st[vf--]);
if(st[vf+1] > valmin)
valmin = st[vf+1];
valmax += st[vf+1];
}
}
inline void afisare()
{
freopen("transport.out","w",stdout);
printf("%d", sol);
}
int solve(int mij)
{
int val, vf, suma, drum, salt;
bool ok;
vf = n; suma = mij; drum = 1; salt =0; ok = 1;
while(vf)
{
if(st[vf] <= suma)
{
suma -= st[vf];
salt++;
}
else
{
if(!salt)
{
ok = 0;
break;
}
else
{
drum++; salt = 0; vf++;
suma = mij;
}
}
vf--;
}
if(!vf && drum<=k)
return 1;
return 0;
}
void bs(int st, int dr)
{
int mij;
while(st <= dr)
{
mij = st+(dr-st)/2;
if(solve(mij))
{
sol = mij;
dr = mij-1;
}
else
st = mij+1;
}
}
int main()
{
citire();
bs(valmin, valmax);
afisare();
return 0;
}