Pagini recente » Cod sursa (job #289704) | Cod sursa (job #2374326) | Cod sursa (job #1136562) | Cod sursa (job #2320351) | Cod sursa (job #1074375)
#include <iostream>
#include <fstream>
std::ifstream fin("transport.in");
std::ofstream fout("transport.out");
int vec[16001], n, k;
int max1, sum;
void citire()
{
fin>>n>>k;
for(int i = 1; i<= n; i++)
{
fin>>vec[i];
sum += vec[i];
if(max1 < vec[i])
{
max1 = vec[i];
}
}
}
bool check(int cap)
{
int dr = 1, sal = 0;
for(int i = 1; i <= n; i++)
{
if(vec[i] + sal <= cap)
{
sal += vec[i];
}
else
{
dr++;
i--;
sal = 0;
}
}
if(dr <= k)
{
return true;
}
return false;
}
int cautare(int st,int dr)
{
if(st > dr)
{
return st;
}
int mij = (st + dr) / 2;
if(check(mij))
{
return cautare(st, mij - 1);
}
else
{
return cautare(mij + 1,dr);
}
}
void rezolvare()
{
// std::cout<<cautare(max1, sum);
fout<<cautare(max1, sum);
}
int main()
{
citire();
rezolvare();
return 0;
}