分析 显然可以转化为阶梯nim. 于是问题转化为了对于所有\(i \in [0,n-m]\),求长度为\(\lfloor\frac{m+1}{2}\rfloor\),和为\(i\),异或和非\(0\)的非负整数序列的个数. 直接DP看似不太可行,然而UOJ群的dalao们告诉博主可以按位DP. 令\(f[i][j][0/1]\)表示考虑了后\(i\)位,当前的和为\(j\),后\(i\)位的异或和是否为\(0\)的方案数,转移时枚举当前位有多少个\(1\),类似数位DP那样就好. 最后用隔板法统…
CF_229E_Gift_概率DP+组合数学 题目描述: 很久很久以前,一位老人和他的妻子住在蔚蓝的海边.有一天,这位老人前去捕鱼,他捉到了一条活着的金鱼.鱼说:“噢,老渔人!我祈求你放我回到海里,这样的话我保证给你n样礼物——任何你想要的礼物!”鱼给了老人一张礼物的清单并附上了礼物的价值.清单上的一些礼物可能会有相同的名称.不同的价值,也可能会有不同的名称.相同的价值.然而,清单上不会出现名称和价值都相同的礼物.老人可以向鱼索要清单上的n个礼物.假设清单上有p样礼物价值相同,则该礼物不能被索要…
[多校联考2019(Round 5)]青青草原的表彰大会(dp+组合数学) 题面 青青草原上有n 只羊,他们聚集在包包大人的家里,举办一年一度的表彰大会,在这次的表彰大会中,包包大人让羊们按自己的贡献从小到大排成一排,以便于发放奖金.每只羊都会得到数值在 1~m 的奖金,并且第 i 只羊的奖金应为第 i+1只羊的约数(即满足 ai|ai+1).现在包包大人想知道一共有多少种不同的发放奖金的方式(两种发放奖金的方式不同是指在两种发放奖金的方式中存在某只羊拿到的奖金不同) 分析 我们发现,序列中不同…
[Codeforces722E] Research Rover (dp+组合数学) 题面 给出一个N*M的方格阵,从(1,1)出发,到(N,M)结束,从(x,y)只能走到(x+1,y)或(x,y+1).方格阵上还有K个特殊点,初始时给出的分数t每经过一个特殊点就会变成\([\frac{t}{2}]\).求到(N,M)时得分的期望.保证(1,1)和(N,M)不是特殊点.\(N,M≤100000,\ K≤2000,\ t≤1000000\) 分析 考虑根据特殊点dp.把(1,1)和(n,m)也看作特…
[SDOI移动金币 链接 vijos 思路 阶梯博弈,dp统计. 参见wxyww 代码 #include <bits/stdc++.h> using namespace std; const int N = 2e5 + 7, mod = 1e9 + 9; int read() { int x = 0, f = 1; char s = getchar(); for (;s > '9' || s < '0'; s = getchar()) if (s == '-') f = -1; f…
首先可以把问题转化一下:m堆石子,一共石子数不超过(n-m)颗,每次可以将一堆中一些石子推向前一堆,无法操作则失败,问有多少种方法使得先手必胜? 然后这个显然是个阶梯Nim,然后有这样的结论:奇数层异或和为0.具体证明:参考这篇博客,当然不是我写的.如果不知道结论,里面有例题POJ1704可以做一下. 然后直接DP显然会T飞,考虑一个按位DP的技巧,f[i][j]表示确定前i位异或起来为0,剩下j个棋子的方案数.组合数相乘转移,注意一些细节即可.复杂度O(nmlogn) #include<bit…
正题 题目链接:https://www.luogu.com.cn/problem/P5363 题目大意 \(1\times n\)的网格上有\(m\)个硬币,两个人轮流向前移动一个硬币但是不能超过前一个硬币,无法移动者输. 求有多少种情况先手必胜. 解题思路 竟然有我会的题,我感动 位置做差分再减去\(1\)之后就是一个经典的阶梯博弈问题了,结论就是奇数位置的异或和. 但是这题是计数,先让\(n\)减去\(m\),然后正难则反考虑求总方案和后手必胜的情况,这样问题就变为有多少个长度为\(m\)的…
问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高位数字不为0. 因此,符合我们定义的最小的有趣的数是2013.除此以外,4位的有趣的数还有两个:2031和2301. 请计算恰好有n位的有趣的数的个数.由于答案可能非常大,只需要输出答案除以1000000007的余数. 输入格式 输入只有一行,包括恰好一个正整数n (4 ≤ n ≤ 1000). 输…
题目链接:http://codeforces.com/problemset/problem/403/D /**算法分析: 这道题综合的考察了dp背包思想和组合数学 */ #include<bits/stdc++.h> #define MAXN 1050 #define PI acos(-1.0) #define MOD 1000000007 #define REP(i,n) for(int i=0; i<n; i++) #define FOR(i,s,t) for(int i=s; i&…
3294: [Cqoi2011]放棋子 Description Input 输入第一行为两个整数n, m, c,即行数.列数和棋子的颜色数.第二行包含c个正整数,即每个颜色的棋子数.所有颜色的棋子总数保证不超过nm. Output 输出仅一行,即方案总数除以 1,000,000,009的余数. Sample Input 4 2 2 3 1 Sample Output 8 HINT N,M<=30 C<=10 总棋子数<=250 Source [分析] 表示一开始看错题ORZ..以为相同颜…