Pagini recente » Cod sursa (job #848615) | Cod sursa (job #1704837) | Cod sursa (job #1102444) | Cod sursa (job #654833) | Cod sursa (job #2065860)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
const int NMAX = 16000;
int v[NMAX+1];
int sol,nrtrans,n;
int check(int volum)
{
int nr=1,sum=0;
for(int i=1; i<=n; i++)
{
if(sum+v[i]>volum)
{
sum=v[i];
nr++;
}
else
{
sum+=v[i];
}
}
return nr;
}
int CB(int low,int high)
{
while(low<=high)
{
int mid = low + (high-low)/2;
int p = check(mid);
if(p==nrtrans)
{
sol = mid;
high=mid-1;
}
else if(p>nrtrans)
{
low=mid+1;
}
else
{
high=mid-1;
}
}
}
int main()
{
in>>n>>nrtrans;
sol=n;
int low=0,high=0;
for(int i=1; i<=n; i++)
{
in>>v[i];
low=max(low,v[i]);
high+=v[i];
}
CB(low,high);
out<<sol;
}