Pagini recente » Cod sursa (job #1876720) | Cod sursa (job #1050238) | Cod sursa (job #1429469) | Cod sursa (job #1771981) | Cod sursa (job #403340)
Cod sursa(job #403340)
#include <iostream>
#include <cstdio>
#define NMAX 100
using namespace std;
int N, K, v[NMAX];
int i, mij, sol, sum, maxx;
void iFu(void)
{
FILE *f = fopen("transport.in", "r");
fscanf(f, "%d%d", &N, &K);
for(i = 1; i <= N; ++i)
{
fscanf(f, "%d", &v[i]);
sum += v[i];
if(v[i] > maxx)
maxx = v[i];
}
fclose(f);
}
bool calc(int total)
{
int tmp = 0, nrc = 0;
for(i = 1; i <= N; ++i)
{
if(tmp + v[i] <= total)
tmp += v[i];
else
{
tmp = v[i];
nrc++;
}
}
if(tmp == v[N])
++nrc;
if(nrc > K)
return 0;
if(nrc <= K)
return 1;
}
void solve(void)
{
int ls = maxx, ld = sum, m;
while(ls <= ld)
{
m = (ls+ld)/2;
int t = calc(m);
if(t)
ld = m - 1, sol = m;
else
ls = m + 1;
}
}
void oFu(void)
{
FILE *g = fopen("transport.out", "w");
fprintf(g, "%d", sol);
fclose(g);
}
int main(void)
{
iFu();
solve();
oFu();
return 0;
}