邦邦的大合唱站队

这一道题目看到\(m\)很小,考虑状压

这个状压的状态只考虑了前\(l[S]\)的位置,后面的人都忽略了。由数学归纳法可以知道,这其实是正确的

我还要证明一下这种转移的正确性:即证明对一个区间\([1,r]\),当乐队顺序固定后,出列的人数最少就是\(r-\)一开始就在对应乐队的区间中的人数

其实用微扰很容易证明,如果存在一种最优方案,让某一个本来最开始就匹配的人(设为\(i\))出列了,那么最后这个人一定会走到这个乐队区间的另一个位置(设为\(j\)),然后他的这个原来的位置(\(i\))就会被另一个人(设为\(k\))来填充,如果是这样的话我们不如直接让\(i\)不出列,然后让\(k\)去填充\(j\)

我最开始的时候认为状态要把整个区间(即\([1,N]\))都考虑进去,所以我的\(f[i]\)表示状态为\(i\)的时候,不在\(i\)里面的乐队可以随便排的最少出队人数

倒是也能做,但是很麻烦,此时人数还是按照上面这样算,然后枚举最后一个乐队是多少,但是不能用\(i\)去除这最后一支的状态的\(f\)来转移,而是应该预处理另一个数组来转移。我们将出队人数分为三部分:第一部分就是最后一支队伍的不匹配人数,与\(i\)剩下的乐队怎么排列无关;第二部分就是\(i\)之外的乐队(排在\(l[S]\)后面),也与\(i\)剩下的乐队怎么排列无关;第一部分就是\(i\)剩下的乐队排列后的不匹配人数。以上三部分中的后两个部分需要预处理两个数组来进行转移

当然这道题目启发我们,费用提前计算别做多了。。只考虑当前状态是一个很典型的DP思想呀

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值