题目链接:poj 3590 The shuffle Problem

题意:

给你一个数n,让你找一个字典序最小的置换序列,使得变换整个周期最大。

题解:

由于置换群的性质,我们可以将n拆分成m个数,使得这m个数的和为n,并且这m个数的最小公倍数最大。

dp可以求出将n拆分后的最大的最小公倍数。

然后可以将这个最大的最小公倍数分解为pi^mi+pi^mi+pi^mi...。

对于每一个pi^mi,就是一个循环的轮数。

然后将这些循环的轮数排序后输出对于的数字就行了。

PS:当前面的总和sum小于n时,前n-sum的循环轮数就全是1,这些数不会影响最大的最小公倍数。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #define F(i,a,b) for(int i=a;i<=b;++i)
 5 using namespace std;
 6 typedef long long ll;
 7
 8 const int N=101;
 9
10 int primes[N+1],tot=0;
11 bool vis[N+1];
12 void Euler(){
13     memset(vis,0,sizeof(vis));
14     F(i,2,N){
15         if(!vis[i])primes[++tot]=i;
16         F(j,1,tot){
17             if(i*primes[j]>N)break;
18             vis[i*primes[j]]=1;
19             if(i%primes[j]==0)break;
20         }
21     }
22 }
23
24 int dp[N][N],mx[N],cnt,tmp,t,sum,n,ans[N];
25
26 void init()
27 {
28     F(i,1,100)F(j,1,100)dp[i][1]=i;
29     F(i,1,100)
30     {
31         F(j,1,i)
32         {
33             F(k,1,i-1)
34             {
35                 int tmp=dp[i-k][j-1]*k/__gcd(dp[i-k][j-1],k);
36                 if(dp[i][j]<tmp)dp[i][j]=tmp;
37             }
38         }
39         F(j,1,i)mx[i]=max(dp[i][j],mx[i]);
40     }
41 }
42
43 int main()
44 {
45     Euler(),init();
46     scanf("%d",&t);
47     while(t--)
48     {
49         scanf("%d",&n);
50         tmp=mx[n],sum=cnt=0;
51         printf("%d",mx[n]);
52         int tmp=mx[n],tp;
53         F(i,1,25)
54         {
55             if(primes[i]>tmp)break;
56             if(tmp%primes[i]==0)
57             {
58                 tp=1;
59                 while(tmp%primes[i]==0)tmp/=primes[i],tp*=primes[i];
60                 ans[++cnt]=tp,sum+=tp;
61             }
62         }
63         sort(ans+1,ans+1+cnt);
64         F(i,1,n-sum)printf(" %d",i);
65         int now=1,num=ans[now],ct=0;
66         F(i,n-sum+1,n)
67         {
68             if(ct==num-1)
69                 printf(" %d",i-ct),ct=0,num=ans[++now];
70             else printf(" %d",i+1),ct++;
71         }
72         puts("");
73     }
74     return 0;
75 }

View Code

转载于:https://www.cnblogs.com/bin-gege/p/7074305.html

poj 3590 The shuffle Problem(置换群+DP)相关推荐

  1. poj 3590 The shuffle Problem——DP+置换

    题目:http://poj.org/problem?id=3590 bzoj 1025 的弱化版.大概一样的 dp . 输出方案的时候小的环靠前.不用担心 dp 时用 > 还是 >= 来转 ...

  2. POJ-3590 The shuffle Problem 置换+DP | DFS

    题目链接:http://poj.org/problem?id=3590 自己暴力给水过去了,不过效率有点低.题目要求的就是给一个数n,要你求出一种方案,一些和为n的数的最小公倍数最大.题目数据量不大, ...

  3. POJ 2826 An Easy Problem?! 叉积求多边形面积 【计算几何】

    ACM博客_kuangbin POJ 2826 An Easy Problem?! An Easy Problem?! Time Limit: 1000MS   Memory Limit: 65536 ...

  4. 【线段树】【模板】讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值)

    [线段树][模板]讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值) ...

  5. poj 3254 Corn Fields (状态压缩DP)

    题目:http://poj.org/problem?id=3254 思路见代码: #include<iostream> using namespace std;const int MOD= ...

  6. POJ 3186Treats for the Cows(区间DP)

    题目链接:http://poj.org/problem?id=3186 题目大意:给出的一系列的数字,可以看成一个双向队列,每次只能从队首或者队尾出队,第n个出队就拿这个数乘以n,最后将和加起来,求最 ...

  7. poj - 3254 Corn Fields (状态压缩dp入门)

    http://poj.org/problem?id=3254 参考:http://blog.csdn.net/accry/article/details/6607703 农夫想在m*n的土地上种玉米, ...

  8. POJ 1155 TELE【树形DP】

    POJ 1155 TELE http://poj.org/problem?id=1155 大意:某电台要广播一场比赛,该电台网络是由N个网点组成的一棵树,其中M个点为客户端, 其余点为转发站.客户端i ...

  9. POJ 2096 Collecting Bugs:期望dp

    题目链接:http://poj.org/problem?id=2096 题意: 有一个程序猿,他每天都会发现一个bug. bug共有n个种类.属于某一个种类的概率为1/n. 有s个子系统,每个bug属 ...

最新文章

  1. Python Web实时消息后台服务器推送技术---GoEasy
  2. android 安装环境及入门
  3. Leetcode 55.跳跃游戏 (每日一题 20210706)
  4. 【通知】深度学习之人脸图像算法重印,欢迎读者支持!
  5. 加载spring上下文的多种方式总结
  6. java 空接口_学Java,java接口搞明白了吗?大牛让你一文搞清楚
  7. Django基础之中间件
  8. Intellij IDEA 识别不了@Slf4j和log的问题
  9. utilities(C++)——单例(Singleton) (使用智能指针 shared_ptr)
  10. ios ffmpeg(libfdk-aac) aac encode
  11. 日语输入法电脑版_如何安装日语输入法?(手机/电脑安装使用指南)
  12. Eclipse中执行Tomcat源代码
  13. 测试软件测显卡有啸叫,完美解决 显卡电流声!显卡啸叫!吱吱的电流声!附解决方案!...
  14. 沪牌学院-沪拍拍课堂2: 出价策略
  15. 通过几种方式来查看windows vista的激活状态
  16. 股票学习-量柱和k线-第四天
  17. 人类数据总量_人类身体的11个极限数据
  18. 一、大话HTTP协议-HTTP的前世今生
  19. 170323 PyQt5 ListWidget的删除
  20. 颜色的前世今生19·外传之PPI、LPI、DPI疑难问题解答

热门文章

  1. 在线预览视频/直播:m3u8、rmpt、mp4、flv
  2. 【Java】 获取当前项目所有的线程
  3. [linux] sftp/ssh异常:ssh_selinux_copy_context getcon failed with No such file or directory
  4. react追加html元素,React给添加元素增加样式
  5. r型聚类分析怎么做_营销型网站怎么做?
  6. graphpad如何做x轴在上方的图_数据分析最有用的25个 Matplotlib图
  7. zigbee 串口不稳定_Zigbee
  8. pythoncgi模块文档_python使用cgi模块处理表单
  9. android 取色器_音乐剪辑器手机版下载-音乐剪辑器app下载v9.10.15 安卓免费版
  10. 【转】自然语言系列学习之表示学习与知识获取(一)分布式表示