Pagini recente » Cod sursa (job #758937) | Cod sursa (job #2619350) | Cod sursa (job #1125555) | Cod sursa (job #1803125) | Cod sursa (job #1891995)
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
const int NMAX = 16005;
int v[NMAX], n, maxim, s;
int check(int k)
{
int nr = 1, suma = 0;
for(int i = 1; i <= n; i++)
{
if(suma + v[i] <= k)
{
suma += v[i];
}
else
{
suma = v[i];
nr++;
}
}
return nr;
}
int cautbin(int x)
{
int sol = s + 1, n2;
for(n2 = 1; n2*2 < s; n2 *= 2)
{
}
for(int i = n2; i > 0; i /= 2)
{
if(sol - i >= maxim && check(sol - i) <= x)
{
sol -= i;
}
}
return sol;
}
int main()
{
int m;
fin >> n >> m;
for(int i = 1; i <= n; i++)
{
fin >> v[i];
maxim = max(maxim, v[i]);
s += v[i];
}
fout << cautbin(m);
return 0;
}