【容斥原理】wikioi 1778 统计公共子序列个数

题目链接:http://wikioi.com/problem/1778/

分析:

我们先思考,当只有一个序列时,如何求出其有多少个不重复的子序列?显然可以定义F[I]表示这个序列的前I位有多少个不同的子序列,转移方程很简单,因为第I个字母可以接在某序列的后面,也可以不接,自然就是F[I]=F[I-1]*2。这样我们会发现答案就是2^长度。但是,这显然是错的。因为我们没有判重!

要知道如何去重,就必须知道出现重复序列的原因!

设当前位S[I]=’a’,并且存在一个最大的J,使得J<I且S[J]=‘a’,那么当阶段在J的时候,我们可以选择是够让F[J-1]个序列接上S[J]。同理,阶段在I的时候,可以选择是否让F[I-1]个序列接上S[I]。显然,F[I-1]包含了所有F[J

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
很高兴回答你的问题。根据容斥原理,如果我们知道不超过2、3、5、7、11、13、17、19、23、29、31、37、41、43、47的素数个数,那么可以得到不超过48的素数个数。 首先是不超过2的素数个数,只有一个2,因此为1。 然后是不超过3的素数个数,有2和3,因此为2。 接着是不超过5的素数个数,有2、3和5,因此为3。 继续是不超过7的素数个数,有2、3、5和7,因此为4。 然后是不超过11的素数个数,有2、3、5、7和11,因此为5。 接下来是不超过13的素数个数,有2、3、5、7、11和13,因此为6。 继续是不超过17的素数个数,有2、3、5、7、11、13和17,因此为7。 然后是不超过19的素数个数,有2、3、5、7、11、13、17和19,因此为8。 接着是不超过23的素数个数,有2、3、5、7、11、13、17、19和23,因此为9。 继续是不超过29的素数个数,有2、3、5、7、11、13、17、19、23和29,因此为10。 然后是不超过31的素数个数,有2、3、5、7、11、13、17、19、23、29和31,因此为11。 接下来是不超过37的素数个数,有2、3、5、7、11、13、17、19、23、29、31和37,因此为12。 继续是不超过41的素数个数,有2、3、5、7、11、13、17、19、23、29、31、37和41,因此为13。 然后是不超过43的素数个数,有2、3、5、7、11、13、17、19、23、29、31、37、41和43,因此为14。 接着是不超过47的素数个数,有2、3、5、7、11、13、17、19、23、29、31、37、41、43和47,因此为15。 因此,根据容斥原理,不超过48的素数个数为: 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 - (素数个数不超过2的交素数个数不超过3的) - (素数个数不超过2的交素数个数不超过5的) - (素数个数不超过2的交素数个数不超过7的) - (素数个数不超过2的交素数个数不超过11的) - (素数个数不超过2的交素数个数不超过13的) - (素数个数不超过2的交素数个数不超过17的) - (素数个数不超过2的交素数个数不超过19的) - (素数个数不超过2的交素数个数不超过23的) - (素数个数不超过2的交素数个数不超过29的) - (素数个数不超过2的交素数个数不超过31的) - (素数个数不超过2的交素数个数不超过37的) - (素数个数不超过2的交素数个数不超过41的) - (素数个数不超过2的交素数个数不超过43的) - (素数个数不超过2的交素数个数不超过47的) = 15 因此,不超过48的素数个数为15个。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值