Pagini recente » Cod sursa (job #203677) | Cod sursa (job #442833) | Cod sursa (job #817852) | Cod sursa (job #1106148) | Cod sursa (job #1247602)
#include <cstdio>
using namespace std;
int v[1000],k,n,x;
int sum=0;
int l,d;
bool ok=false;
int minim=0; //valoarea minimului
int transport;
void citire()
{
freopen("transport.in","r",stdin);
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
{
scanf("%d",&v[i]);
sum+=v[i];
}
l=sum/n;
d=sum;
}
void verificare() //trimit prin x valoarea
{
int s=0;
transport=1;
for(int i=1;i<=n;i++)
if(s+v[i]<=x)
s=s+v[i];
else
{
transport++;
s=0;
i--;
}
if(transport==k)
if(minim<x)
{
minim=x;
ok=false; // ok e false daca minimul se modifica
}
else
ok=true;
if(transport<=k)
d=x;
else
l=x;
}
void rezolvare()
{
while(ok==false||l==d) //cat timp n-am gasit solutia
{
x=(l+d)/2;
verificare();
}
}
int main()
{
citire();
rezolvare();
freopen("transport.out","w",stdout);
printf("%d",x);
return 0;
}