Pagini recente » Monitorul de evaluare | Istoria paginii utilizator/anthonysolomon2769 | Monitorul de evaluare | Diferente pentru utilizator/visuianmihai intre reviziile 52 si 53 | Cod sursa (job #3135440)
#include <fstream>
using namespace std;
ifstream fin ("transport.in");
ofstream fout ("transport.out");
int n,st,dr,k,i,s,maxx,sum,ok,maxc,l,j,v[16001];
int f (int i)
{
sum=0;
l=0;
for (j=1; j<=n; j++)
{
sum=sum+v[j];
if (sum>i)
{
sum=sum-v[j];
sum=0;
l++;
if (l>k)
return 0;
sum=v[j];
}
if (j==n)
{
l++;
if (l>k)
return 0;
if (sum>maxx)
maxx=sum;
}
}
return 1;
}
int main()
{
fin>>n>>k;
for (i=1; i<=n; i++)
{
fin>>v[i];
s=s+v[i];
if (v[i]>maxc)
maxc=v[i];
}
if (k==1)
{
fout<<s;
return 0;
}
st=maxc;
dr=s;
while (st<=dr)
{
int mij=(st+dr)/2;
if (f (mij)==1)
dr=mij-1;
else
st=mij+1;
}
fout<<st;
return 0;
}