博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ1025 [SCOI2009]游戏
阅读量:5794 次
发布时间:2019-06-18

本文共 1599 字,大约阅读时间需要 5 分钟。

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
3 1 2 4 5 6
1 2 3 5 4 6
2 3 1 4 5 6
3 1 2 5 4 6
1 2 3 4 5 6
这时,我们就有若干排1到N的排列,上例中有7排。现在windy想知道,对于所有可能的对应关系,有多少种可
能的排数。

Input

  包含一个整数N,1 <= N <= 1000

Output

  包含一个整数,可能的排数。

Sample Input

【输入样例一】
3
【输入样例二】
10

Sample Output

【输出样例一】
3
【输出样例二】
16

题解

首先,我们考虑如果有一个置换(即对应关系),我们把它写成循环,例如题目描述中可以写成

$$(1, 2, 3)(4, 5)(6)$$

即每个括号内循环对应。那么,显而易见的,排数等于其第一次回到初始位置的步数加一,即各循环长度的最小公倍数乘积加一。

那么,题目就转化为:将N分解成一些数,每一个分解求出最小公倍数,求有多少不相同的最小公倍数。

由于将一个数分为互质的两个数会更优(即最小公倍数不会改变且和不会更大),所以我们只需要考虑置换中只有质数的幂和1。

那么,问题就转换成了:将N分解成质数幂和1的和,且各质数最多只出现一个幂,有多少种分法?

这个问题就是裸的分组背包,即每一组物品是$(p, p^2, ..., p^{\lfloor log_pn\rfloor})$

附代码:

#include 
typedef long long LL;const int N = 1050;bool mark[N];int cnt, prime[500];void getPrime(int n) { cnt = 0; for (int i = 2; i <= n; ++i) { if (!mark[i]) prime[cnt++] = i; for (int j = 0; j < cnt && prime[j] * i <= n; ++j) { mark[i * prime[j]] = 1; if (!(i % prime[j])) break; } }}LL f[N];LL tmp[N];int main() { int n; scanf("%d", &n); f[0] = 1; getPrime(n); for (int i = 0; i < cnt; ++i) { for (int j = 0; j <= n; ++j) { tmp[j] = 0; for (int k = prime[i]; k <= j; k *= prime[i]) tmp[j] += f[j - k]; } for (int i = 0; i <= n; ++i) f[i] += tmp[i]; } for (int i = 0; i < n; ++i) f[n] += f[i]; printf("%lld\n", f[n]); return 0;}

  

转载于:https://www.cnblogs.com/y-clever/p/6984429.html

你可能感兴趣的文章
数据库技术进化路线
查看>>
版本控制-搭建git服务器
查看>>
[老老实实学WCF] 第七篇 会话
查看>>
道破Redis的VM
查看>>
Codeforces Gym 100610 Problem E. Explicit Formula 水题
查看>>
最新 Windows 10 应用项目模板发布
查看>>
HTMLParser 使用详解
查看>>
Bootstrap Metronic 学习记录(二)菜单栏
查看>>
Timer Swing
查看>>
jQuery插件Flot实战Demo
查看>>
java中常用的字符串的截取方法
查看>>
UVA 1599 Ideal Path(bfs1+bfs2,双向bfs)
查看>>
Walking Ant(bfs)
查看>>
nodejs常用组件
查看>>
允许debian wheezy支持IOS7+的iphone.
查看>>
微软可疑更新DhMachineSvc.exe
查看>>
Let's Encrypt 正式出發(免费HTTPS证书即将到来)
查看>>
iOS设计模式 - 享元
查看>>
phpstorm的主题相关
查看>>
邮件模板修改
查看>>