[XSY] 传统游戏(DP、容斥)

传统游戏

  • 看到题,第一想法是设dp[k][s]dp[k][s]dp[k][s]表示选了kkk个数,当前异或和为sss的方案数,但这样产生一个问题:要如何保证所选的数不重复且无序呢?
  • 一种方法是修改状态:我们增设一维iiidp[i][k][s]dp[i][k][s]dp[i][k][s]表示从≤i\leq ii的范围中 (引入“阶段”使决策有序化) 选了kkk个数,当前异或和为sss的方案数。(按任意顺序选数难以得知哪些数被选过,但如果强制按从小到大的顺序选数,便可保证所选的数不重且无序。思路类似背包的状态设计。)
    这样可以过掉subtask1subtask1subtask1
  • 上面的方法适合nnnLLL小的情况,然而此题中nnn远小于LLL。我们转化一下思路,从高往低考虑二进制下的每一位,枚举nnn个所选数的这一位上是0还是1,每一位只有2n2^n2n种情况,总时间复杂度O(2nL)O(2^nL)O(2nL):设F[i][lim][sta]F[i][lim][sta]F[i][lim][sta]表示做完了从高往低的前iii位,最大的那个数是否还等于mmm ,从大往小每个数是否等于下一个数(状压) 的方案数,数位DP即可
  • 另一种思路是:直接计算不重且无序的方案数不方便,因此先算可重且有序的方案数,再通过容斥搞出不重且无序的方案数。(思路类似简单的博弈题)
  • 考虑如何计算可重且有序的方案数:
  • 类似 数位DP 的做法,从高位往低位考虑,假设当前做到第iii位。
    不难发现,如果一个数的前i−1i-1i1位还等于mmm的前i−1i-1i1位 ,那么接下来的一位填什么还会受限制;
    然而如果一个数的前i−1i-1i1位已经小于mmm的前i−1i-1i1位了,那么接下来所有位填什么都不会受限制。
  • 这样一来,如果做完第iii位后,这nnn个数中有某个数的前iii位小于mmm的前iii位,那么可以让其余n−1n-1n1个数在填第i+1i+1i+1位以及之后的位时,不再考虑异或和为0的限制,然后用这个数把最终的异或和调整为0。
  • 因此,我们可以枚举从哪一位开始出现确定小于mmm的数,然后计算方案数。
    不妨设在这一位填1后后面几位还有aaa种方案(仅考虑<m<m<m的限制),填0后还有bbb种方案(仅考虑<m<m<m的限制),那么方案数为:∑i=0n−1Cniaibn−1−i[imod2=0]\sum_{i=0}^{n-1}C_n^ia^ib^{n-1-i}[i\space mod\space 2=0]i=0n1Cniaibn1i[i mod 2=0](若某个数在这一位确定小于mmm,那么此数的这一位必为0,其余n−1n-1n1个数仍要保证在这一位上的异或和为0,iii表示在这一位填1的数的个数)
  • 如此,我们可以在O(nL)O(nL)O(nL)的时间内算出选nnn个数的可重且有序的方案数。但因为要做容斥,所以我们需要知道所有选111~nnn个数的方案数,这样复杂度就是O(n2L)O(n^2L)O(n2L)了。
  • 仔细观察,发现式子还能继续化简:
    ∑i=0n−1Cniaibn−1−i[imod2=0]\sum_{i=0}^{n-1}C_n^ia^ib^{n-1-i}[i\space mod\space 2=0]i=0n1Cniaibn1i[i mod 2=0]
    =∑i=0nCniaibn−i[imod2=0]−an[nmod2=0]=\sum_{i=0}^{n}C_n^ia^ib^{n-i}[i\space mod\space 2=0]-a^n[n\space mod\space 2=0]=i=0nCniaibni[i mod 2=0]an[n mod 2=0]
    =∑i=0nCniaibn−i+∑i=0nCni(−a)ibn−i2−an[nmod2=0]=\frac{\sum_{i=0}^{n}C_n^ia^ib^{n-i}+\sum_{i=0}^{n}C_n^i(-a)^ib^{n-i}}{2}-a^n[n\space mod\space 2=0]=2i=0nCniaibni+i=0nCni(a)ibnian[n mod 2=0]
    =(a+b)n+(b−a)n2−an[nmod2=0]=\frac{(a+b)^n+(b-a)^n}{2}-a^n[n\space mod\space 2=0]=2(a+b)n+(ba)nan[n mod 2=0]
    这样,时间复杂度就是O(nL)了O(nL)了O(nL)
  • 考虑如何用容斥得出答案:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asp.net core添加全局异常处理及log4net、Nlog应用

一、介绍此篇文章将会介绍项目的全局异常收集以及采用log4net或者NLog记录。众所周知&#xff0c;一旦自己的项目报错&#xff0c;如果没有进行处理都是显示不友好的&#xff0c;有得甚至直接爆出错误页面&#xff0c;看的也是很奇怪。为了避免出现这样的错误以及在错误出现的时…

牛客网 【每日一题】5月20日题目 简单瞎搞题

比赛链接 文章目录题目描述题解&#xff1a;代码&#xff1a;题目描述 输入描述: 第一行一个数 n。 然后 n 行&#xff0c;每行两个数表示 li,ri。 输出描述: 输出一行一个数表示答案。 示例1 输入 5 1 2 2 3 3 4 4 5 5 6输出 26备注: 1 ≤ n , li , ri ≤ 100 题解&#xf…

P6688-可重集【字符串hash,线段树】

正题 题目链接:https://www.luogu.com.cn/problem/P6688 解题思路 nnn个数&#xff0c;每次有操作 修改一个数询问两个区间是否他们中的元素分别组成的可重集合A,BA,BA,B&#xff0c;满足对于每个AiBikA_iB_ikAi​Bi​k其中kkk是一个相同的数 解题思路 先不考虑kkk的问题 我…

【贪心】畜栏预定(ybtoj 贪心-1-3)

畜栏预定 ybtoj 贪心-1-3 题目大意 有n头牛&#xff0c;每头牛会在某一连续时间段吃草&#xff0c;问你同一时间最对有多少头牛&#xff0c;最后对于每一头牛给一个吃草的位置&#xff0c;使得同一时间内吃草的牛的位置不重合 输入样例 5 1 10 2 4 3 6 5 8 4 7输出样例 4…

ASP.NET Core 2.0利用MassTransit集成RabbitMQ

在ASP.NET Core上利用MassTransit来集成使用RabbitMQ真的很简单&#xff0c;代码也很简洁。近期因为项目需要&#xff0c;我便在这基础上再次进行了封装&#xff0c;抽成了公共方法&#xff0c;使得使用RabbitMQ的调用变得更方便简洁。那么&#xff0c;就让咱们来瞧瞧其魅力所在…

简单的数据结构题(多项式、拉格朗日插值、线段树)

简单的数据结构题 首先考虑计算要求的式子&#xff0c;不妨设l1,rnl1,rnl1,rn。 ∑i1naik∏j̸i1−aiajai−aj\sum_{i1}^{n}a_i^k\prod_{j\noti}\frac{1-a_ia_j}{a_i-a_j}∑i1n​aik​∏j​i​ai​−aj​1−ai​aj​​ ∑i1naik∏j̸i1ai−aj∏j̸i(1−aiaj)\sum_{i1}^{n}a_…

牛客网 【每日一题】5月21日题目 图的遍历

链接&#xff1a; 文章目录题目描述题解代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld题目描述 小sun最近为了应付考试&#xff0c;正在复习图论&#xff0c;他现在学…

P4306-[JSOI2010]连通数【bitset】

正题 题目链接:https://www.luogu.com.cn/problem/P4306 题目大意 nnn个点的有向图&#xff0c;求图上可以相互到达点数。 解题思路 就是bitsetbitsetbitset这个黑科技的模板&#xff0c;首先是传递闭包 fi,jfi,k∣fk,jf_{i,j}f_{i,k}|f_{k,j}fi,j​fi,k​∣fk,j​也就是如果…

【贪心】国王游戏(ybtoj 贪心-1-4)

国王游戏 ybtoj 贪心-1-4 题目大意 有一个国王和n个大臣 每人左右手分别有一个数&#xff0c;现在然你对大臣们排列&#xff08;国王在第一个&#xff09; 每个大臣所得金币是前面的人左手上的数的积除以他右手上的数 现在问你获得金币最多的大臣最少得多少金币 样例输入 …

《通过C#学Proto.Actor模型》之 HelloWorld

在微服务中&#xff0c;数据最终一致性的一个解决方案是通过有状态的Actor模型来达到&#xff0c;那什么是Actor模型呢&#xff1f;Actor是并行的计算模型&#xff0c;包含状态&#xff0c;行为&#xff0c;并且包含一个邮箱&#xff0c;来异步处理消息。关于Actor的介绍可参考…

牛客网【每日一题】5月22日 [CQOI2009]中位数图

链接&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 给出1~n的一个排列&#xff0c;统计该排列有多少个长度为奇数的连续子序列的中位数是b。中位数是指把所有…

[XSY] 计数(DP,NTT,分治)

计数 考虑转化题目&#xff0c;变为网格上有若干个点&#xff0c;要从(0,0)(0,0)(0,0)走到(n,an1)(n,a_{n1})(n,an1​) &#xff0c;每一步只能往右走一步或往上走一步&#xff0c;且若当前在(i,j)(i,j)(i,j) &#xff0c;必须满足0≤j≤ai10\leq j\leq a_{i1}0≤j≤ai1​&…

P3700-[CQOI2017]小Q的表格【分块,欧拉函数】

正题 题目链接:https://www.luogu.com.cn/problem/P3700 题目大意 一个n∗nn*nn∗n个数的数字表格&#xff0c;开始位置(a,b)(a,b)(a,b)上的是a∗ba*ba∗b。数字表格需满足以下条件 对于任意(a,b)(a,b)(a,b)有f(a,b)f(b,a)f(a,b)f(b,a)f(a,b)f(b,a)对于任意(a,b)(a,b)(a,b)有…

.Net Core应用框架Util介绍(一)

距离上次发文&#xff0c;已经过去了三年半&#xff0c;这几年技术更新节奏异常迅猛&#xff0c;.Net进入了跨平台时代&#xff0c;前端也被革命性的颠覆。回顾2015年&#xff0c;正当我还沉迷于JQuery EasyUi的封装时&#xff0c;突然意识到技术已经过时。JQuery在面对更加复…

牛客网 【每日一题】5月26日题目精讲 [JSOI2007]建筑抢修

链接&#xff1a; 文章目录题目描述题意&#xff1a;题解&#xff1a;题目描述 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏&#xff1a;经过了一场激烈的战斗&#xff0c;T部落消灭了所有z部落的入侵者。但是T部落的基地里已经有N个建筑设施受到了严重的损伤&#xf…

【二分】数列分段(ybtoj 二分-1-1)

数列分段 ybtoj 二分-1-1 题目大意 给出一个序列A&#xff0c;让你把它分成m段&#xff0c;使每段和最大值最小 输入样例 5 3 4 2 4 5 1输出样例 6数据范围 1⩽M⩽N⩽1051\leqslant M\leqslant N\leqslant 10^51⩽M⩽N⩽105 sum{Ai}⩽109sum\begin{Bmatrix}A_i\end{Bmatr…

CF878E-Numbers on the blackboard【并查集,贪心】

正题 题目链接:https://www.luogu.com.cn/problem/CF878E 题目大意 nnn个数字&#xff0c;每次可以把两个相邻的数字x,yx,yx,y变为x2yx2yx2y。 mmm次询问一个区间合成一个数字后最大是多少。 解题思路 答案可以把每个数字变成xicix_i^{c_i}xici​​&#xff0c;其中ci≤ci−1…

2021-03-24

非空G个数G的大小n的奇偶性答案>4\\D3\奇数D3至少一个大小>2\D3均为1偶数D-12大小均>2\D2至少一个大小>2奇数D2一个大小1&#xff0c;一个大小>1偶数D-12均为1奇数D-12均为1偶数

牛客网【每日一题】5月27日题目精讲 货币系统

链接&#xff1a; 文章目录题目描述题解&#xff1a;代码&#xff1a;题目描述 在网友的国度中共有n种不同面额的货币&#xff0c;第i种货币的面额为a[i]&#xff0c;你可以假设每一种货币都有无穷多张。为了方便&#xff0c;我们把货币种数为n、面额数组为a[1…n]的货币系统记…

使用.NET Core+Docker 开发微服务

.NET Core发布很久了,因为近几年主要使用java&#xff0c;所以还没使用过.NET Core&#xff0c;今天正好有一个c#写的demo&#xff0c;需要做成服务&#xff0c;不想再转成java来实现&#xff0c;考虑使用.NET CORE来尝下鲜&#xff0c;目标是开发一个微服务&#xff0c;然后部…