cojs 简单的01串 题解报告

本文介绍了一种使用数位动态规划的方法来解决特定的二进制串问题,即找出所有不大于其逆序串、取反串及逆序取反串的n位二进制串,并按字典序排序后的第k个串。

题意显然是求n位二进制串中不大于其逆序串,取反串,逆序取反串的所有串按字典序排序后的第k个

 

由于n很小,k很大所以我们可以考虑逐位确定

问题转化为了求方案数,这显然是可以用数位DP做的

设f[len][rev][inv]表示当前前缀长度为len,rev表示是否等于其逆序串,inv表示是否等于其逆序取反串

枚举当前点的选择可能性和对称点的选择可能性并判断合法性转移即可

至于为什么不用考虑去取反串的限制呢?

因为显然我们的首位是0,然后取反串的限制就没了QAQ

注意当n是奇数,在中间的时候当前点和对称点会重合,此时要额外判断是否当前点的对称点的方案是否相等

至于转移自己脑补即可

转载于:https://www.cnblogs.com/joyouth/p/5492048.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值