【bzoj1025】【SCOI2009】【游戏】【dp】
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。
Output
包括一个整数。可能的排数。
Sample Input
3
【输入例子二】
10
Sample Output
3
【输出例子二】
16
HINT
【数据规模和约定】
100%的数据。满足 1 <= N <= 1000 。
题解:首先能够发现这个变换是由几个子集合的轮换构成的。然后最后答案就是这几个轮换长度的最小公倍数+1
然后轮换长度是从1-n的。那问题就变成了把n分成几个部分,然后这几个部分的最小公倍数的种类数。
最小公倍数肯定就是一坨素因子加加乘乘。
那么算出1-n有多少素因子。设f[i][j]表示用前i个素因子容量为j。
直接背包好了。。
#include<iostream>
#include<cstdio>
using namespace std;
int n,t,p[1001];
long long ans,f[1001][1001];
bool ff[1001];
void get()
{
for(int i=2;i<=1000;i++)
{
if(!ff[i])p[++t]=i;
for(int j=1;j<=t&&i*p[j]<=1000;j++){ff[i*p[j]]=true;if(i%p[j]==0 )break; }
}
}
void dp()
{
f[0][0]=1;
for(int i=1;i<=t;i++)
{
for(int j=0;j<=n;j++)f[i][j]=f[i-1][j];
for(int j=p[i];j<=n;j*=p[i])
for(int k=0;k<=n-j;k++)
f[i][k+j]+=f[i-1][k];
}
}
int main()
{
cin>>n;
get();
dp();
for(int i=0;i<=n;i++)ans+=f[t][i];
cout<<ans<<endl;
}
【bzoj1025】【SCOI2009】【游戏】【dp】的更多相关文章
- [BZOJ1025][SCOI2009]游戏 DP+置换群
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1025 题目中的排数就是多少次回到原来的序列.很显然对于题目所描述的任意一种对应法则,其中一 ...
- bzoj1025: [SCOI2009]游戏(DP)
题目大意:将长度为n的排列作为1,2,3,...,n的置换,有可能置换x次之后,序列又回到了1,2,3,...,n,求所有可能的x的个数. 看见这种一脸懵逼的题第一要务当然是简化题意...我们可以发现 ...
- bzoj千题计划116:bzoj1025: [SCOI2009]游戏
http://www.lydsy.com/JudgeOnline/problem.php?id=1025 题目转化: 将n分为任意段,设每段的长度分别为x1,x2,…… 求lcm(xi)的个数 有一个 ...
- BZOJ1025 [SCOI2009]游戏 【置换群 + 背包dp】
题目链接 BZOJ1025 题解 题意就是问一个\(1....n\)的排列在同一个置换不断重复下回到\(1...n\)可能需要的次数的个数 和置换群也没太大关系 我们只需知道同一个置换不断重复,实际上 ...
- 2018.09.02 bzoj1025: [SCOI2009]游戏(计数dp+线筛预处理)
传送门 要将所有置换变成一个轮换,显然轮换的周期是所有置换长度的最小公倍数. 于是我们只需要求长度不超过n,且长度最小公倍数为t的不同置换数. 而我们知道,lcm只跟所有素数的最高位有关. 因此lcm ...
- bzoj1025 [SCOI2009]游戏——因数DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1025 这篇博客写得真好呢:https://www.cnblogs.com/phile/p/4 ...
- [BZOJ1025] [SCOI2009]游戏 解题报告
Description windy学会了一种游戏.对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应.最开始windy把数字按顺序1,2,3,……,N写一排在纸上.然后再在这一排下面写上它们对 ...
- BZOJ1025: [SCOI2009]游戏
Description windy学会了一种游戏.对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应.最开始windy把数字按顺序1,2,3,……,N写一排在纸上.然后再在这一排下面写上它们对 ...
- bzoj1025: [SCOI2009] 游戏 6
DP. 每种排法的长度对应所有循环节长度的最小公倍数. 所以排法总数为和为n的几个数的最小公倍数的总数. #include<cstdio> #include<algorithm> ...
- [bzoj1025][SCOI2009]游戏 (分组背包)
Description windy学会了一种游戏.对于1到N这N个数字,都有唯一 且不同的1到N的数字与之对应.最开始windy把数字按顺序1,2,3,……,N写一排在纸上.然后再在这一排下面写上它们 ...
随机推荐
- 欧拉函数&&欧拉定理
定义和简单性质 欧拉函数在OI中是个非常重要的东西,不知道的话会吃大亏的. 欧拉函数用希腊字母φ表示,φ(N)表示N的欧拉函数. 对φ(N)的值,我们可以通俗地理解为小于N且与N互质的数的个数(包含1 ...
- C# Event.ClickCount 解决垃圾鼠标带来的烦恼
今天调试遇到个Bug,百思不得其解的是在自己的设备上重来不重现,在测试机上百分百重现,如下: 问题:点击一次Button执行两次Click操作 分析:看Log的确是执行了两次,就像真的点击了两次But ...
- html5 窗口之间的通信
一般窗口通信分为三种: iframe嵌套:多个iframe之间通信. 父页面操作子页面元素:oFrame.contentWindow.document.body. 父页面调用子页面方法:oFrame. ...
- 浅讲ajax
1.ajax入门案例 1.1 搭建Web环境 ajax对于各位来说,应该都不陌生,正因为ajax的产生,导致前台页面和服务器之间的数据传输变得非常容易,同时还可以实现页面的局部刷新.通过在后台与服务器 ...
- go的基础数据类型
一.基础数据类型 在go语言中,数据类型用于申明函数和变量 go语言的类型 数据类型 描述 布尔型 布尔型值的只能是true 和 false ,例如 var b bool = true, 布尔型值声明 ...
- JS——事件详情(鼠标事件:clientX、clientY的用法)
鼠标位置 >可视区位置:clientX.clientY 跟着鼠标移动的div案例 代码如下图: 这个案例,运用到前一篇文章中的event事件来处理.获取div的left和top值,当鼠标移动 ...
- 4.Flask-alembic数据迁移工具
alembic是用来做ORM模型与数据库的迁移与映射.alembic使用方式跟git有点类似,表现在两个方面,第一个,alemibi的所有命令都是以alembic开头: 第二,alembic的迁移文件 ...
- mysql数据库的介绍及安装
一.什么是数据库 1.什么是数据(Data) 描述事物的符号记录成为数据,描述事物的符号既可以是文字.图片.图像.声音.语言等,数据有多种表现形式,他们都可以经过数字化后存入计算机 在计算机中描述一个 ...
- 题解报告:hdu 4764 Stone(巴什博弈)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4764 Problem Description Tang and Jiang are good frie ...
- SQLServer2008 关于数据转换
全进位 select cast(ceiling(2.1111) as dec(18,0)) 结果:3