微前端架构如何改变企业的开发模式与效率提升
695
2022-10-20
CodeForces Round #140(226B) - Naughty Stone Piles
这种范围的数据..贪心噜..关键是要逆转思维..从后往前想...
如果没有k的限制条件..显然用最大石头数的堆不动..其他的堆往上加..那么答案是总石头数-最大堆的石头数..
加上k的限制条件.一个石头堆直接移动到最大石头堆中..是1次移动..若其先与其他石头堆合并一次..在同那堆石头一起加到最大石头堆中..实际相当于移动了两次...若其先先合并了k次.. 再加到最大石头堆中..那么这堆移动成功的代价是其石头数*(合并数+1)..为了使得总的代价最小..那么期望的是石头数越大的堆合并的次数越少..
若限制了每堆石头上只能覆盖k堆..对于最大石头堆...其上面的k堆..必然是除了最大石头堆的后k大的堆唯一一次移动...而这k大堆上每个又能容纳k个石头堆.那么就有k^2的堆是移动了两次的...同理..又有k^3个石头堆是移动了3次的...
由此...要求n个石头堆..限制为k时的算法复杂度为 log(k,n)... 但是..要注意k=1的情况..因为不会发生指数增长..所以速度会慢..会超时..但是对于k=1的情况..是可以方便算出来的..特判一下就好了...
Program:
#include
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~