Pagini recente » Cod sursa (job #835322) | Cod sursa (job #1314427) | Cod sursa (job #2141437) | Cod sursa (job #1650633) | Cod sursa (job #1571267)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
short int n,k;
short int *v;
bool capacitate(int c)
{
int nr = 0;
int s = 0;
for(int i=1;i<=n;i++)
{
if(s+v[i]<=c)
s+=v[i];
else
{
nr++;
s = 0;
if(s+v[i]<=c)
s+=v[i];
}
}
nr++;
if(nr<=k)
return true;
return false;
}
int main()
{
int x=0,y=0;
in>>n>>k;
v = new short int[n+1];
for(int i=1;i<=n;i++)
{
in>>v[i];
if(x<v[i])
x = v[i];
y+=v[i];
}
int ok = 0;
int rez = -1;
while((x<=y) && (!ok))
{
int m = (x+y)/2;
bool answer = capacitate(m);
if(answer && (!capacitate(m-1)))
{
rez = m;
ok = 1;
}
else
{
if(!answer)
x = m+1;
else
y = m-1;
}
}
out<<rez<<'\n';
return 0;
}