SOS(Sum over Subsets)dp————一类状态压缩动态规划

之前补cf场时做到这道题,发现一点思路也没有?然后看了题解发现这是一类codeforces上考烂了的dp专题。所以花了一天时间补了一下。

codeforces上的原博客

SOSdp是一类计算子集贡献的状压dp,如果x&y==x,则我们称yx的子集(可能不太标准),例如5(101)的子集有4(100)、1 (001)、0。而我们要求的就是

F [ m a s k ] = ∑ i ⊂ m a s k A [ i ] F[mask] = \sum_{i\subset mask}A[i] F[mask]=imaskA[i]

如何求解?我们先设 d p [ m a s k ] [ i ] dp[mask][i] dp[mask][i]表示二进制从低到高(从0开始计数)已经处理完前i位的情况。例如, d p [ 1011011 ] [ 2 ] dp[1011011][2] dp[1011011][2]表示前3项011已经计算完成的状态,所以此时 d p [ 1011011 ] [ 2 ] dp[1011011][2] dp[1011011][2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值