传送门

要将所有置换变成一个轮换,显然轮换的周期是所有置换长度的最小公倍数。

于是我们只需要求长度不超过n,且长度最小公倍数为t的不同置换数。

而我们知道,lcm只跟所有素数的最高位有关。

因此lcm=∏iprimeipi" role="presentation" style="position: relative;">∏iprimeipi∏iprimeipi 。

于是我们可以定义状态f[i][j]表示前i个素数凑出的和为j的方案数。

这个可以用类似于背包的算法处理。

于是就愉快的做完了。

代码:

#include<bits/stdc++.h>
#define ll long long
#define N 1005
using namespace std;
int n,pri[N],tot=0;
bool vis[N];
ll f[N][N],ans=0;
inline void init(int len){
    for(int i=2;i<=len;++i){
        if(!vis[i])pri[++tot]=i;
        for(int j=1;j<=tot;++j){
            int k=pri[j]*i;
            if(k>len)break;
            vis[k]=true;
            if(i%pri[j]==0)break;
        }
    }
}
int main(){
    cin>>n,init(n);
    f[0][0]=1;
    for(int i=1;i<=tot;++i){
        for(int j=0;j<=n;++j)f[i][j]=f[i-1][j];
        for(int j=pri[i];j<=n;j*=pri[i])for(int k=0;k<=n-j;++k)f[i][j+k]+=f[i-1][k];
    }
    for(int i=0;i<=n;++i)ans+=f[tot][i];
    cout<<ans;
    return 0;
}

2018.09.02 bzoj1025: [SCOI2009]游戏(计数dp+线筛预处理)的更多相关文章

  1. 2018.09.02 bzoj1296: [SCOI2009]粉刷匠(dp套dp)

    传送门 dp好题. 先推出对于每一行花费k次能最多粉刷的格子数. 然后再推前i行花费k次能最多粉刷的格子数. 代码: #include<bits/stdc++.h> #define N 5 ...

  2. bzoj1025 [SCOI2009]游戏——因数DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1025 这篇博客写得真好呢:https://www.cnblogs.com/phile/p/4 ...

  3. BZOJ 1025: [SCOI2009]游戏( 背包dp )

    显然题目要求长度为n的置换中各个循环长度的lcm有多少种情况. 判断一个数m是否是满足题意的lcm. m = ∏ piai, 当∑piai ≤ n时是满足题意的. 最简单我们令循环长度分别为piai, ...

  4. bzoj千题计划116:bzoj1025: [SCOI2009]游戏

    http://www.lydsy.com/JudgeOnline/problem.php?id=1025 题目转化: 将n分为任意段,设每段的长度分别为x1,x2,…… 求lcm(xi)的个数 有一个 ...

  5. 2018.09.02 bzoj1003: [ZJOI2006]物流运输(dp+最短路转移)

    传送门 dp好题. 每一天要变更路线一定还是走最短路. 所以l~r天不变更路线的最优方案就是把l~r天所有不能走的点都删掉再求最短路.显然是可以dp的. 设f[i]表示第i天的最优花销.那么我们枚举在 ...

  6. BZOJ1025 [SCOI2009]游戏 【置换群 + 背包dp】

    题目链接 BZOJ1025 题解 题意就是问一个\(1....n\)的排列在同一个置换不断重复下回到\(1...n\)可能需要的次数的个数 和置换群也没太大关系 我们只需知道同一个置换不断重复,实际上 ...

  7. [BZOJ1025][SCOI2009]游戏 DP+置换群

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1025 题目中的排数就是多少次回到原来的序列.很显然对于题目所描述的任意一种对应法则,其中一 ...

  8. bzoj1025: [SCOI2009]游戏(DP)

    题目大意:将长度为n的排列作为1,2,3,...,n的置换,有可能置换x次之后,序列又回到了1,2,3,...,n,求所有可能的x的个数. 看见这种一脸懵逼的题第一要务当然是简化题意...我们可以发现 ...

  9. [BZOJ1025] [SCOI2009]游戏 解题报告

    Description windy学会了一种游戏.对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应.最开始windy把数字按顺序1,2,3,……,N写一排在纸上.然后再在这一排下面写上它们对 ...

随机推荐

  1. Tomcat 异常关闭排查

    N次请求 tomcat conf/server.xml https://blog.csdn.net/qq_30121245/article/details/52861935 pattern分析 %a ...

  2. 转载:mysql binlog同步redis

    ref: https://wenku.baidu.com/view/5d9d04ac6394dd88d0d233d4b14e852458fb39c4.html

  3. mongodb基础学习1-基本说明及安装

    以前看过一些mongodb的视频,但只看到一半没有看完,也没有同步安装软件动手操作,正好最近没事,打算花点时间从头学习一遍,边学习边动手操作,学习的过程在此进行记录. 好了,下面说一下今天的学习内容. ...

  4. 常用类一一基本数据类型的包装类(WrapperClass)一一Byte Short nteger Long Float Double Character Boolean

    为什么需要包装类? JAVA是支持跨平台的.可以在服务器 也可以在手机上运行 基本数据类型 在栈中  效率更高 包装类 将数据类型转换成对象 在 堆中  利于操作 package cn.bjsxt.w ...

  5. oracle与DB2

    1.体系结构,DB2的实例和数据库分开的做法,我个人还是比较喜欢的,因为实例可以创建多个,数据库的恢复直接恢复到实例下就可以了,相对ORACLE简单多了. 2.管理工具,DB2的管理工具做得太简陋了, ...

  6. Mysql一些记忆

    mysql修改密码报错是yum 安装mysql5.7 是 出现无法登陆问题以及mysql error You must reset your password using ALTER USER sta ...

  7. php 利用迭代器遍历文件夹

    1.遍历文件夹 scandir 2.原生的迭代器Iterrate $scan_dir = "txtDir"; //下面会遍历txtDir 下面所有字文件夹中的文件哦 $dir_it ...

  8. 安装Anaconda以及jupyter的使用

    1)下载https://www.anaconda.com/download/ 2)安装 3)终端查看(Anaconda Prompt) 4)升级所有的包 初次安装下的软件包版本一般都比较老旧,因此提前 ...

  9. 基于mysql全文索引的深入理解

    最近要使用mysql的全文索引,一直没能成功,一个是只有MyISAM引擎支持,创建表时需要指定,而是需要对my.ini进行配置. 前言:本文简单讲述全文索引的应用实例,MYSQL演示版本5.5.24. ...

  10. Js语言的奇怪特性

    var a = .3 - 2; console.log(a); a = 0.099999998 而不是0.1,是不是很奇怪?