【题意分析】

  定义一个等价类为满足如下条件的一个极大的集合Q:∀t∈Q,k∈N+,若tk∈全集R,都成立tk∈Q。

  给定n,记[1,n]∩N上所有排列置换的全集为R。求对于所有的等价类Q,card({x|x=card(Q),Q∈R})。

【解题思路】

  很明显,一个排列置换能分解成一个或几个不相交的置换环,其所在等价类的元素个数即为所有置换环长度的最小公倍数。

  显然,若一个置换所有置换环长度的最大公约数大于1,则一定有一个置换环长度的最大公约数等于1的所在等价类元素个数与之相同。

  所以,我们只要统计只有互质且不等于1的长度的置换环的置换所在等价类元素个数即可。

  这样问题就可以转化为如何拆分n使所有拆分出的数都是pk(p为互不相等的质数,k∈[1,+∞)∩N)。

  先筛出[1,n]∩N范围内所有质数,然后DP,f[i][j]表示已经选到了第i个质数,可分配的长度还剩下j的剩余时的拆分数。

  转移方程:f[i][j]=f[i-1][j]+Σf[i-1][j+p[i]k],时间复杂度O(nπ(n))。

【参考代码】

 1 #pragma GCC optimize(2)
 2 #pragma comment(linker,"/STACK:1024000000,1024000000")
 3 #include <cstdio>
 4 #include <cstring>
 5 #define REP(i,low,high) for(register int i=(low);i<=(high);++i)
 6 using namespace std;
 7
 8 static int n,cnt=0; long long f[1010][1010]; bool isprime[1010]; int prime[1010];
 9
10 long long DFS(const int &now,const int &rest)
11 {
12     if(now>cnt) return 1; if(~f[now][rest]) return f[now][rest];
13     f[now][rest]=DFS(now+1,rest);
14     for(register int i=prime[now];i<=rest;i*=prime[now])
15     {
16         f[now][rest]+=DFS(now+1,rest-i);
17     }
18     return f[now][rest];
19 }
20
21 int main()
22 {
23     scanf("%d",&n),memset(isprime,1,sizeof isprime),memset(f,-1,sizeof f);
24     REP(i,2,n) if(isprime[i]) {REP(j,2,n/i) isprime[i*j]=0; prime[++cnt]=i;}
25     return printf("%lld\n",DFS(1,n)),0;
26 }

View Code

转载于:https://www.cnblogs.com/spactim/p/6492328.html

bzoj1025题解相关推荐

  1. [JS][dfs]题解 | #迷宫问题#

    题解 | #迷宫问题# 题目链接 迷宫问题 题目描述 定义一个二维数组 N*M ,如 5 × 5 数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 1, 1 ...

  2. [JS][dp]题解 | #打家劫舍(一)#

    题解 | #打家劫舍(一)# 题目链接 打家劫舍(一) 题目描述 描述 你是一个经验丰富的小偷,准备偷沿街的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家, ...

  3. [JS]题解 | #魔法数字#

    题解 | #魔法数字# 题目链接 魔法数字 题目描述 牛妹给牛牛写了一个数字n,然后又给自己写了一个数字m,她希望牛牛能执行最少的操作将他的数字转化成自己的. 操作共有三种,如下: 在当前数字的基础上 ...

  4. [JS]题解 | #岛屿数量#

    题解 | #岛屿数量# 题目链接 岛屿数量 题目描述 时间限制:1秒 空间限制:256M 描述 给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛.我们只考虑上下左右 ...

  5. [JS] 题解:提取不重复的整数

    题解:提取不重复的整数 https://www.nowcoder.com/practice/253986e66d114d378ae8de2e6c4577c1 时间限制:1秒 空间限制:32M 描述 输 ...

  6. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  7. [洛谷1383]高级打字机 题解

    题解 这道题一看就珂以用主席树啊 这是一道神奇的题目,那么我们先敲一个主席树,然后维护一个数组len,表示下一次应该在len + 1插入, 之后对于T操作,在上一个版本的len + 1上直接执行插入 ...

  8. luogu P1549 棋盘问题(2) 题解

    luogu P1549 棋盘问题(2) 题解 题目描述 在\(N * N\)的棋盘上\((1≤N≤10)\),填入\(1,2,-,N^2\)共\(N^2\)个数,使得任意两个相邻的数之和为素数. 例如 ...

  9. 【题解搬运】PAT_L1-009 N个数求和

    从我原来的博客上搬运.原先blog作废. (伪)水题+1,旨在继续摸清这个blog(囧 题目 就是求N个数字的和.麻烦的是,这些数字是以有理数"分子/分母"的形式给出的,你输出的和 ...

最新文章

  1. markdown分享
  2. import export php,import与export在node.js中的使用方法
  3. java 文件上传 jar_JavaWeb 之 使用 commons-fileupload.jar 实现文件上传
  4. gin-vue-admin菜单配置教程:父子菜单
  5. 006 list类型
  6. java发送消息_通过java给qq邮箱发送信息
  7. 浏览器HTTP缓存机制 1
  8. 利用Oracle Enterprise Manager Cloud Control 12c创建DataGuard Standby
  9. 《Android 应用案例开发大全(第3版)》——第1.3节Android开发环境的搭建
  10. 深度理解相机中的各个参数(对比度、饱和度、亮度、曝光度、锐度)
  11. 2020最新WordPress网站优化教程
  12. 看黑科技如何助白娘子逃出雷锋塔!
  13. 【Proteus仿真】在AT24C04的连续地址中写入数据并循环读取
  14. 赛维时代IPO过会:第一季净利降71% 出口跨境电商热度降温
  15. 灵感:从想法的天空到现实的地面
  16. 视频无损放大软件:Topaz Video Enhance AI Mac版(支持m1)
  17. VIBE君,放过MOTO吧
  18. jira在哪创建子任务?
  19. android实现来电动画,华为来电动画app-华为来电动画(透明来电秀)安卓版-幻想游戏网...
  20. 【转贴】内存重要参数详解 RAS CAS

热门文章

  1. jboss启动之奇葩问题
  2. php和mvc的认识
  3. 用开源项目cropper实现对图片中任意部分进行裁剪
  4. Marshal类的简单使用
  5. (转)浅析当今视频文件的格式
  6. diesel fuel
  7. 出国留学想申请国家留学基金委的奖学金?传说中的csc! 从这里入手就对了!
  8. 【Spring Boot】1.基础知识
  9. 聊聊storm的IWaitStrategy
  10. 19道小米网运维工程师笔试真题