Pagini recente » Profil florinhaja | Cod sursa (job #43664) | Cod sursa (job #291490) | Cod sursa (job #776945) | Cod sursa (job #408891)
Cod sursa(job #408891)
#include<fstream>
using namespace std;
int n,k,rez=100000,suma=0, MAX;
int v[16005];
int verifica(int capacitate);
void cautare(int st,int dr);
int main()
{
ifstream fin("transport.in");
ofstream fout("transport.out");
fin>>n>>k;
int i;
for(i=1;i<=n;i++)
{
fin>>v[i];
suma+=v[i];
if(v[i]>MAX)
MAX=v[i];
}
cautare(MAX,suma);
fout<<rez;
return 0;
}
void cautare(int st,int dr)
{
if(st==dr)
{
int c=verifica(st);
if(c<=k && st<rez)
rez=st;
}
else
{
int mij;
mij=(st+dr)/2;
int a=verifica(mij);
if (a<=k)
{
if (mij<rez)
rez=mij;
cautare(st, mij);
}
else
cautare(mij+1, dr);
}
}
int verifica(int capacitate)
{
int s=0,a=0,i;
for(i=1;i<=n;i++)
{
a++;
s=v[i];
while(s+v[i+1]<=capacitate){
s+=v[i+1];
i++;
}
}
return a;
}