题目大意
一棵n层的满二叉树,叶子从左到右编号为
现在你可以选择任意个非叶子节点,交换它们的左右儿子。
通过这种方式生成的所有序列{A2n−1}中,求
∑2n−2i=0WAi,Ai+1
的最小值。其中W是给定的
n<=9
思路
骗分算法
设f(l,r,x,y)表示[l,r)区间中,最左是数x,最右是数
f(l,r,x,y)=f(l,mid,x,a)+f(mid,r,b,y)+Wa,b
理论上界时间复杂度O((25n))
正解
设fi,j表示当前要放第i个位置,前一个数是
假若直接枚举下一个取的数k,显然会有很多无效的状态。
哪些状态是有效的呢?
记lowbit=i&-i,则
那么j和
不难得出k的可取范围为
bg = (j^lowbit) & ~(lowbit-1)
en = bg + lowbit
理论时间复杂度上界O(n3)
本文探讨了一棵满二叉树通过交换非叶子节点子节点生成所有序列时,最小权值代价的问题。利用骗分算法和低比特位操作,优化了状态转移过程,实现了理论上的时间复杂度控制。
852

被折叠的 条评论
为什么被折叠?



