Pagini recente » Cod sursa (job #850734) | Cod sursa (job #2644328) | Cod sursa (job #2812283) | Cod sursa (job #7713) | Cod sursa (job #2312065)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int n,i,k;
int v[16005];
int s[1000000];
int vmax=0;
int suma=0;
void Citire()
{
fin>>n>>k;
for(i=1; i<=n; i++)
{
fin>>v[i];
suma=suma+v[i];
if(v[i]>vmax)
vmax=v[i];
}
}
void Creare(int vmax,int suma)
{
for(i=vmax;i<=suma;i++)
s[i]=i;
}
int main()
{
Citire();
Creare(vmax,suma);
int Left=vmax;
int Right=suma;
int Mid;
int ee;
bool ok=false;
while(Left<=Right)
{
ok=false;
int nr=0;
Mid=(Left+Right)/2;
if(s[Mid])
{
int sum=0;
nr=0;
for(i=1; i<=n; i++)
{
if(sum+v[i]<=s[Mid])
{
sum=sum+v[i];
if(sum==s[Mid])
{
sum=0;
nr++;
}
}
else
{
sum=0;
sum=sum+v[i];
nr++;
}
}
if(sum<s[Mid])
nr++;
if(nr<=k)
{
ee=s[Mid];
ok=true;
}
}
if(ok)
{
Right=Mid-1;
}
else
{
if(nr>v[Mid])
Left=Mid+1;
else
Right=Mid-1;
}
}
fout<<ee;
return 0;
}