传送门 要将所有置换变成一个轮换,显然轮换的周期是所有置换长度的最小公倍数. 于是我们只需要求长度不超过n,且长度最小公倍数为t的不同置换数. 而我们知道,lcm只跟所有素数的最高位有关. 因此lcm=∏iprimeipi" role="presentation" style="position: relative;">∏iprimeipi∏iprimeipi . 于是我们可以定义状态f[i][j]表示前i个素数凑出的和为j的方案数. 这个可以用类似…
传送门 dp好题. 先推出对于每一行花费k次能最多粉刷的格子数. 然后再推前i行花费k次能最多粉刷的格子数. 代码: #include<bits/stdc++.h> #define N 55 #define T 2505 using namespace std; int n,m,t,sum[T],f[T][T],g[T][T],ans=0; char s[N]; int main(){ scanf("%d%d%d",&n,&m,&t); for(in…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1025 这篇博客写得真好呢:https://www.cnblogs.com/phile/p/4473192.html 代码如下: #include<iostream> #include<cstdio> #include<cstring> using namespace std; ],cnt; ][],ans; ]; void init() { ;i<=n;i+…
显然题目要求长度为n的置换中各个循环长度的lcm有多少种情况. 判断一个数m是否是满足题意的lcm. m = ∏ piai, 当∑piai ≤ n时是满足题意的. 最简单我们令循环长度分别为piai,不足n的话,我们令其他循环长度为1, 补到=n为止. 这样它们的lcm显然是=m的. 然后就是一个背包了...dp(i, j) = dp(i - 1, j) + ∑1≤t≤adp( i - 1, j - pt ) 表示前i个质数, 和为j有多少中方案 #include<bits/stdc++.h>…
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)…
传送门 dp好题. 每一天要变更路线一定还是走最短路. 所以l~r天不变更路线的最优方案就是把l~r天所有不能走的点都删掉再求最短路.显然是可以dp的. 设f[i]表示第i天的最优花销.那么我们枚举在哪里切换路线更优,则有状态转移方程: f[i]=min(f[j]+spfa(j,i)∗(i−j)+k)(j=1...i−1)" role="presentation" style="position: relative;">f[i]=min(f[j]+s…
题目链接 BZOJ1025 题解 题意就是问一个\(1....n\)的排列在同一个置换不断重复下回到\(1...n\)可能需要的次数的个数 和置换群也没太大关系 我们只需知道同一个置换不断重复,实际上就是每个循环节的元素不断在循环节上旋转,所需次数就是所有循环节长度的\(lcm\) 这一点很显然 而循环节数量是任意的,长度也可以是任意的,但总和一定是\(n\) 问题就转化为了有多少个数\(x\)能为总和为\(n\)的一些数的\(lcm\) 如果令\(x = \prod\limits_{i = 1…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1025 题目中的排数就是多少次回到原来的序列.很显然对于题目所描述的任意一种对应法则,其中一定有一个或者多个循环节. 设有$m$个循环节,每个循环节的大小为$A_i$,则回到最开始的序列需要置换$lcm\{A_i\} (i=1->m)$次. 于是问题变成了求$n=\sum_{i=1}^mA_i$,且$lcm\{A_i\} (i=1->m)$各不相同的$\{A\}$有多少种. 我们可以用一…
题目大意:将长度为n的排列作为1,2,3,...,n的置换,有可能置换x次之后,序列又回到了1,2,3,...,n,求所有可能的x的个数. 看见这种一脸懵逼的题第一要务当然是简化题意...我们可以发现,序列回到原状的次数就是每个循环的规模(即在循环中的数字个数)的lcm,而且因为有n个数,显然所有循环的规模之和就是n,那么问题就被简化成了a1+a2+a3+...+ak=n,求lcm(a1,a2,a3,...,an)的个数. 现在题意已经清楚多了,那咋写呢QAQ 我们把一个数分解质因数,p为质数,…
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…