Pagini recente » Cod sursa (job #1486306) | Cod sursa (job #1684208) | Cod sursa (job #133680) | Cod sursa (job #2824488) | Cod sursa (job #981388)
Cod sursa(job #981388)
#include <cstdio>
#define FIN "transport.in","r",stdin
#define FOUT "transport.out","w",stdout
using namespace std;
int n,k,a[16005],st,dr,mid,i,sol,nr;
int check(int max_capacity,int capacity, int vf)
{
if(!vf)return 1;
if(a[vf]>max_capacity)return 100+check(max_capacity,capacity,0);
if(capacity+a[vf]<=max_capacity) return check(max_capacity,capacity+a[vf],vf-1);
return 1+check(max_capacity,0,vf);
}
int main()
{
freopen(FIN);
freopen(FOUT);
scanf("%d %d",&n,&k);
for(i=1;i<=n;i++)
scanf("%d",&a[i]),dr+=a[i];
st=1;
sol=-1;
while(st<=dr)
{
mid=(st+dr)/2;
nr=check(mid,0,n);
if(nr==k)sol=mid,dr=mid-1;
else if(nr<k && sol==-1)dr=mid-1;
else if(nr>k) st=mid+1;
else st=dr+1;
}
printf("%d",sol);
return 0;
}