邦邦的大合唱站队

这一道题目看到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思想呀

posted @   最爱丁珰  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示