Pagini recente » Cod sursa (job #1538526) | Cod sursa (job #2290054) | Cod sursa (job #426449) | Cod sursa (job #3248656) | Cod sursa (job #2655830)
#include <fstream>
#define NMAX 16005
using namespace std;
int v[NMAX];
ifstream fin("transport.in");
ofstream fout("transport.out");
bool check(int n,int k,int target)
{
int i,s,cnt=0;
s=0;
for(i=1;i<=n;i++)
{
s=s+v[i];
if(v[i]>target)
return 0;
if(s>target)
s=v[i],cnt++;
if(cnt>k)
return 0;
}
if(s>0)
cnt++;
if(cnt>k)
return 0;
return 1;
}
int bs(int n,int k,int init,int fina)
{
int st,dr,med,last;
st=init;
dr=fina;
last=fina;
while(st<=dr)
{
med=(st+dr)/2;
if(check(n,k,med)==1)
last=med,dr=med-1;
else
st=med+1;
}
return last;
}
int main()
{
int n,k,i,ming,maxg;
fin>>n>>k;
ming=16001;
for(i=1;i<=n;i++)
{
fin>>v[i];
ming=min(ming,v[i]);
maxg=maxg+v[i];
}
fout<<bs(n,k,ming,maxg);
return 0;
}