Pagini recente » Cod sursa (job #2958077) | Cod sursa (job #907409) | Cod sursa (job #1994004) | Cod sursa (job #1124729) | Cod sursa (job #1211350)
#include <fstream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
const int MAX_N = 16000;
int v[MAX_N+1], partSum[MAX_N+1];
int n;
int transpNo(int start,int capacity)
{
int i = start+1;
while(i <= n && partSum[i]-partSum[start] <= capacity)
{
i++;
}
i--;
if(i == n)
{
return 1;
}
int k = 1;
k += transpNo(i, capacity);
return k;
}
int main()
{
int k;
int sum = 0, maxVol = 0;
int i;
in >> n >> k;
for(i = 1; i <= n; i++)
{
in >> v[i];
partSum[i] = partSum[i-1] + v[i];
sum += v[i];
if(v[i] > maxVol)
{
maxVol = v[i];
}
}
int st = maxVol, dr = sum, m;
int x;
while(st <= dr)
{
m = (st+dr)/2;
x = transpNo(0,m);
if(x > k)
{
st = m+1;
}
else
{
if(x < k)
{
dr = m-1;
} else
{
while(x == k)
{
m--;
x = transpNo(0,m);
}
st = dr+1;
m++;
}
}
}
out << m;
return 0;
}