Pagini recente » Cod sursa (job #1541348) | Cod sursa (job #2104434) | Cod sursa (job #1603524) | Cod sursa (job #2798596) | Cod sursa (job #381272)
Cod sursa(job #381272)
#include<fstream>
#define inf "transport.in"
#define outf "transport.out"
#define NMax 16001
using namespace std;
fstream f(inf,ios::in),g(outf,ios::out);
int N,K;
int v[NMax];
int verif(int cap)
{
int cur=0;
int pasi=0;
for(int i=1;i<=N;i++)
{
if(v[i]>cap)return -1;
else if(cur+v[i]<=cap)cur+=v[i];
else {cur=v[i];pasi++;}
}
return pasi+1;
}
int cauta(int st,int dr)
{
int mij,cost;
int p;
while(st<=dr)
{
mij=(st+dr)/2;
p=verif(mij);
if(p<=K && p!=-1)
{
cost=mij;
dr=mij-1;
}
else if(p==-1 || p>K)st=mij+1;
}
return cost;
}
void Citire()
{
int sum=0,max=0;
f>>N>>K;
for(int i=1;i<=N;i++)
{
f>>v[i];
sum+=v[i];
if(max<v[i])max=v[i];
}
g<<cauta(max,sum);
}
int main()
{
Citire();
f.close();
g.close();
return 0;
}