Pagini recente » Cod sursa (job #1780713) | Clasament 1323 | Cod sursa (job #1730984) | Cod sursa (job #2099830) | Cod sursa (job #762066)
Cod sursa(job #762066)
#include<cstdio>
#define NMAX 16010
#define maxim(a,b) ((a>b)?(a):(b))
#define oo (1<<30)
using namespace std;
int N,K,Sval,Vmax,a[NMAX];
void citire()
{
freopen("transport.in","r",stdin);
scanf("%d %d",&N,&K);
Vmax=-oo;
for(int i=1;i<=N;i++)
{
scanf("%d",&a[i]);
Vmax=maxim(Vmax,a[i]);
Sval+=a[i];
}
}
bool verif(int SUM)
{
int i,kk=1,s=0;
for(i=1;i<=N && kk<=K;i++)
{
if(s+a[i]>SUM)
s=a[i],kk++;
else
s+=a[i];
}
if(kk>K)
return false;
return true;
}
int search()
{
int step,i;
for(step=1;step<Sval;step<<=1);
for(i=Sval;step && i>=Vmax;step>>=1)
if(i-step>=Vmax)
if(verif(i-step))
i-=step;
return i;
}
void afisare(int Sol)
{
freopen("transport.out","w",stdout);
printf("%d\n",Sol);
}
int main()
{
citire();
afisare(search());
return 0;
}