bzoj1025 [SCOI2009]游戏 动态规划】的更多相关文章

题目描述 对于一些长度为n的排列,将其作为一个置换,那么可能有一个自置换的次数使其回到1,2,3,...,n的情况.求对于所有能够回到1,2,3..,n的排列,不同的次数共有多少种. 题解来自黄学长 这道题可以转换一下. 试想每一个对应关系a-b为从a->b的一条边, 那么图中一定存在n条边且每个点入度出度都为1, 易证一定存在一个或几个环. 实际上排数就是这几个环大小的最小公倍数. 即求和为n的数列的最小公倍数种数. 那么可以直接DP #include<algorithm> #incl…
http://www.lydsy.com/JudgeOnline/problem.php?id=1025 题目转化: 将n分为任意段,设每段的长度分别为x1,x2,…… 求lcm(xi)的个数 有一个定理: 若Z可以作为几个数最小公倍数, 令 Z=p1^a1 * p2^a2 * ……  pi为质数 那么 当这几个数 的分别为 p1^a1  , p2^a2 …… 时, 这几个数的和最小,为Σ pi^ai 所以可以得出 如果将这个和最小化 之后 <=n ,那么 这个Z就能取到 (和小于n可以补1)…
Description windy学会了一种游戏.对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应.最开始windy把数字按顺序1,2,3,……,N写一排在纸上.然后再在这一排下面写上它们对应的数字.然后又在新的一排下面写上它们对应的数字.如此反复,直到序列再次变为1,2,3,……,N. 如: 1 2 3 4 5 6 对应的关系为 1->2 2->3 3->1 4->5 5->4 6->6 windy的操作如下 1 2 3 4 5 6 2 3 1 5 4 6…
Description windy学会了一种游戏.对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应.最开始windy把数字按顺序1,2,3,……,N写一排在纸上.然后再在这一排下面写上它们对应的数字.然后又在新的一排下面写上它们对应的数字.如此反复,直到序列再次变为1,2,3,……,N. 如: 1 2 3 4 5 6 对应的关系为 1->2 2->3 3->1 4->5 5->4 6->6 windy的操作如下 1 2 3 4 5 6 2 3 1 5 4 6…
Description windy学会了一种游戏.对于1到N这N个数字,都有唯一 且不同的1到N的数字与之对应.最开始windy把数字按顺序1,2,3,……,N写一排在纸上.然后再在这一排下面写上它们对应的数字.然后又在新的一 排下面写上它们对应的数字.如此反复,直到序列再次变为1,2,3,……,N. 如: 1 2 3 4 5 6 对应的关系为 1->2 2->3 3->1 4->5 5->4 6->6 windy的操作如下 1 2 3 4 5 6 2 3 1 5 4…
题目链接 BZOJ1025 题解 题意就是问一个\(1....n\)的排列在同一个置换不断重复下回到\(1...n\)可能需要的次数的个数 和置换群也没太大关系 我们只需知道同一个置换不断重复,实际上就是每个循环节的元素不断在循环节上旋转,所需次数就是所有循环节长度的\(lcm\) 这一点很显然 而循环节数量是任意的,长度也可以是任意的,但总和一定是\(n\) 问题就转化为了有多少个数\(x\)能为总和为\(n\)的一些数的\(lcm\) 如果令\(x = \prod\limits_{i = 1…
DP. 每种排法的长度对应所有循环节长度的最小公倍数. 所以排法总数为和为n的几个数的最小公倍数的总数. #include<cstdio> #include<algorithm> #include<cstring> using namespace std; + ; int cnt,n; long long f[maxn][maxn]; int prime[maxn]; bool not_prime[maxn]; void get_prime(int n) { ; i &…
标题效果:特定n.行定义一个替代品1~n这种更换周期发生后,T次要(T>0)返回到原来的顺序 找到行的所有可能的数 循环置换分解成若干个,然后行位移数是这些周期的长度的最小公倍数 因此,对于一些,是将这个数分解质因数.令x=p1^a1*p2^a2*...*pk^ak.若p1^a1+p2^a2+...+pk^ak<=n,则x就是可能的排数 分组背包就可以 令f[i][j]表示用前i个质数,和为j能得出的数的数量 每组的物品是pi^1~pi^ai 时间复杂度O(n/lgn*logn*n)=O(n^…
传送门 要将所有置换变成一个轮换,显然轮换的周期是所有置换长度的最小公倍数. 于是我们只需要求长度不超过n,且长度最小公倍数为t的不同置换数. 而我们知道,lcm只跟所有素数的最高位有关. 因此lcm=∏iprimeipi" role="presentation" style="position: relative;">∏iprimeipi∏iprimeipi . 于是我们可以定义状态f[i][j]表示前i个素数凑出的和为j的方案数. 这个可以用类似…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1025 可以认为对应的值之间连边,就连成了一个有一个或几个环的图.列数就是每个环里点数的lcm的和+1. 所以问题转化为和为n的数列的lcm种类数. 然后就看了TJ.这个人写得真的很好.https://www.cnblogs.com/phile/p/4473192.html 关键点就是将思路改成“判断这个x是不是可行(是否可以是和为n的数的lcm,因为可以有任意个1,所以也就是是否可以是和<…