Pagini recente » Cod sursa (job #876009) | Cod sursa (job #3151469) | Cod sursa (job #916858) | Cod sursa (job #1925634) | Cod sursa (job #1515183)
#include <fstream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
int n,a[16001],k;
bool verificare(int k,int s)
{
int i=0,sum;
while(k>0 && i<=n)
{
sum=0;
while(sum<s && i<n)
{
i++;
sum+=a[i];
}
if(sum>s) i--;
k--;
}
if(i<n) return 0;
else return 1;
}
int binary_search(int max,int suma)
{
int i,step,val=(max+suma)/2;
for(step=max;step<=suma;step<<=1);
for(i=1;step;step>>=1)
if(i+step<suma && i+step<val) i+=step;
return i;
}
int main()
{
int i,max=0,suma=0,min,mij;
in>>n>>k;
for(i=1;i<=n;i++)
{
in>>a[i];
if(a[i]>max) max=a[i];
suma+=a[i];
}
min=suma;
/*while(verificare(k,max)==0)
{
max++;
}*/
while(max<suma)
{
mij=(max+suma)/2;
//out<<"Mijlocul este:"<<mij<<"\t max este:"<<max<<"\t suma este:"<<suma<<"\n";
if(verificare(k,mij)==0)
{
max=mij+1;
}else{
min=mij;
suma=mij;
}
//out<<"Minimul este:"<<min<<"\n";
}
out<<min;
in.close();
out.close();
return 0;
}