Pagini recente » Cod sursa (job #134161) | Cod sursa (job #2962015) | Cod sursa (job #3229374) | Cod sursa (job #1067989) | Cod sursa (job #1503998)
#include<iostream>
#include<fstream>
using namespace std;
fstream fin("transport.in",ios::in),fout("transport.out",ios::out);
int x[16003],s=0,maxim=-9999,n,k;
bool verificare(int smax)
{
int i,j,kk=0,saux;
for(i=1;i<=n;i++)
{
saux=x[i];
if(i+1>n)kk++;
for(j=i+1;j<=n;j++)
{
saux+=x[j];
if(saux>smax)
{
i=j-1;
kk++;
break;
}
}
}
if(kk>k)return 0;
return 1;
}
int divide(int p,int u)
{
int m,ultim;
while(p<=u)
{
m=(p+u)/2;
if(verificare(m))
{
ultim=m;
u=m-1;
}
else
{
p=m+1;
}
}
return ultim;
}
int main()
{
int i;
fin>>n>>k;
for(i=1;i<=n;i++)
{
fin>>x[i];
if(x[i]>maxim)maxim=x[i];
s+=x[i];
}
fout<<divide(maxim,s);
return 0;
}