标签:
题意:有一条圆形的路,你的仓库在0点,这条路长l,然后有n个苹果树,每个数的坐标是xi(顺时针),每棵树上有ai个苹果。你有个篮子,能装k个苹果,问你用这个篮子将所有苹果装回仓库所走的最短路为多少?
请特别注意上面的苹果个数的条件。因为我的学长 就是从这个条件成功做出了这道题,orz!1≤n,k≤105,ai≥1,a1+a2+...+an≤105 1≤L≤109 0≤x[i]≤L
因为苹果数不超过10^5,所以将每个苹果当作点。
用一个数组pos记录每个苹果距0点的距离,排序后,然后就可以用另外一个数组rpos记录每个苹果逆时针距0点的距离。
然后我们用两个数组来分别记录从顺时针摘取前i个苹果(这个前i个是顺时针查)所走的最短,和从逆时针摘取前i个苹果(逆时针查)所走的最短。
那么我们就可以枚举顺时针摘了多少个苹果,剩下就让它逆时针摘,两者加起来,找最小的。由于是学长做出来的,代码就不贴了,就放个核心代码吧。
for(i=1;i<ca;i++)//ca是总苹果树 { dps[i]=dps[max(i-k,0)]+min(lr,2*pos[i]);//如果原路返回比较长那么还不如直接走一圈 } for(i=1;i<ca;i++) { dpr[i]=dpr[max(i-k,0)]+min(lr,2*rpos[i]); }
版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/hitwhacmer1
2015多校第二场 1004( Delicious Apples )
标签:
原文地址:http://blog.csdn.net/hitwhacmer1/article/details/47028175