BZOJ 1025: [SCOI2009]游戏 [置换群 DP]

时间:2021-07-14 23:57:02

传送门


题意:求$n$个数组成的排列变为升序有多少种不同的步数


步数就是循环长度的$lcm$.....

那么就是求$n$划分成一些数几种不同的$lcm$咯

然后我太弱了这种$DP$都想不出来....

通过枚举每个质因子的指数来求$lcm$

$d[i][j]$表示前$i$个质因子当前和为$j$的方案数

转移枚举质因子的指数

但这样我们忽略了可以划分出$1$,所以统计答案时枚举$j$

或者我们直接初始化$d[0][i]=1$

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=;
typedef long long ll;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-; c=getchar();}
while(c>=''&&c<=''){x=x*+c-''; c=getchar();}
return x*f;
}
int n;
int p[N];
bool notp[N];
void sieve(int n){
for(int i=;i<=n;i++){
if(!notp[i]) p[++p[]]=i;
for(int j=;j<=p[]&&i*p[j]<=n;j++){
notp[i*p[j]]=;
if(i%p[j]==) break;
}
}
}
ll f[N][N];
void dp(){
f[][]=;
for(int i=;i<=p[];i++)
for(int j=;j<=n;j++){
f[i][j]=f[i-][j];
for(int k=p[i];k<=j;k*=p[i])
f[i][j]+=f[i-][j-k];
}
ll ans=;
for(int i=;i<=n;i++) ans+=f[p[]][i];
printf("%lld",ans);
}
int main(){
freopen("in","r",stdin);
n=read();
sieve(n);
dp();
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=;
typedef long long ll;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-; c=getchar();}
while(c>=''&&c<=''){x=x*+c-''; c=getchar();}
return x*f;
}
int n;
int p[N];
bool notp[N];
void sieve(int n){
for(int i=;i<=n;i++){
if(!notp[i]) p[++p[]]=i;
for(int j=;j<=p[]&&i*p[j]<=n;j++){
notp[i*p[j]]=;
if(i%p[j]==) break;
}
}
}
ll f[N][N];
void dp(){
f[][]=;
for(int i=;i<=n;i++) f[][i]=;
for(int i=;i<=p[];i++)
for(int j=;j<=n;j++){
f[i][j]=f[i-][j];
for(int k=p[i];k<=j;k*=p[i])
f[i][j]+=f[i-][j-k];
}
printf("%lld",f[p[]][n]);
}
int main(){
freopen("in","r",stdin);
n=read();
sieve(n);
dp();
}

BZOJ 1025: [SCOI2009]游戏 [置换群 DP]的更多相关文章

  1. BZOJ 1025&colon; &lbrack;SCOI2009&rsqb;游戏&lpar; 背包dp &rpar;

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

  2. &lbrack;BZOJ 1025&rsqb; &lbrack;SCOI2009&rsqb; 游戏 【DP】

    题目链接:BZOJ - 1025 题目分析 显然的是,题目所要求的是所有置换的每个循环节长度最小公倍数的可能的种类数. 一个置换,可以看成是一个有向图,每个点的出度和入度都是1,这样整个图就是由若干个 ...

  3. &lbrack;bzoj 1025&rsqb;&lbrack;SCOI2009&rsqb;游戏(DP)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1025 分析:首先这个问题等价于A1+A2+……Ak=n,求lcm(A1,A2,……,Ak)的种 ...

  4. BZOJ 1025 &lbrack;SCOI2009&rsqb;游戏

    1025: [SCOI2009]游戏 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1533  Solved: 964[Submit][Status][ ...

  5. bzoj 1025 &lbrack;SCOI2009&rsqb;游戏(置换群,DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1025 [题意] 给定n,问1..n在不同的置换下变回原序列需要的不同排数有多少种. [ ...

  6. BZOJ 1025 &lbrack;SCOI2009&rsqb;游戏 &lpar;DP&plus;分解质因子&rpar;

    题意: 若$a_1+a_2+\cdots+a_h=n$(任意h<=n),求$lcm(a_i)$的种类数 思路: 设$lcm(a_i)=x$, 由唯一分解定理,$x=p_1^{m_1}+p_2^{ ...

  7. bzoj 1025&colon; &lbrack;SCOI2009&rsqb;游戏【数学&plus;dp】

    很容易发现行数就是lcm环长,也就是要求和为n的若干数lcm的个数 有结论若p1^a1+p2^a2+...+pm^am<=n,则ans=p1^a1p2^a2..*pm^am是n的一个可行答案.( ...

  8. BZOJ 1025 SCOI2009 游戏 动态规划

    标题效果:特定n.行定义一个替代品1~n这种更换周期发生后,T次要(T>0)返回到原来的顺序 找到行的所有可能的数 循环置换分解成若干个,然后行位移数是这些周期的长度的最小公倍数 因此,对于一些 ...

  9. 【BZOJ】1025&colon; &lbrack;SCOI2009&rsqb;游戏(置换群&plus;dp&plus;特殊的技巧&plus;lcm)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1025 首先根据置换群可得 $$排数=lcm\{A_i, A_i表示循环节长度\}, \sum_{i= ...

随机推荐

  1. 新浪微博客户端&lpar;35&rpar;-使用NSMutableAttributedString实现多行文本的效果

    DJComposeViewController.m import "DJComposeViewController.h" #import "DJAccountTool.h ...

  2. 【转】【异常处理】Incorrect string value&colon; &&num;39&semi;&bsol;xF0&bsol;x90&bsol;x8D&bsol;x83&period;&period;&period;&&num;39&semi; for column&period;&period;&period; Emoji表情字符过滤的Java实现

    http://blog.csdn.net/shootyou/article/details/44852639 Emoji表情字符现在在APP已经广泛支持了.但是MySQL的UTF8编码对Emoji字符 ...

  3. 转:RealThinClient &lpar;RTC&rpar;是什么&quest;

    RealThinClient SDK是用于开发标准的HTTP(S)服务器,ISAPI扩展以及客户端的VCL控件.可用于Windows下的CodeGear Delphi 6-XE5. 功能描述 Abou ...

  4. SQL Server XML基础学习之&lt&semi;7&gt&semi;--XML modify&lpar;&rpar; 方法对 XML 数据中插入、更新或删除

    /*------------------------------------------------------------------------------+ #| = : = : = : = : ...

  5. vim 学习记录2

    当前行进行替换:s/XXX/YYY/gXXX是需要替换的字符串,YYY是替换后的字符串. 全局替换:% s/XXX/YYY/g. 对指定部分进行替换用V进入visual模式,再进行:s/XXX/YYY ...

  6. java基础知识回顾之---java String final类 容易混淆的java String常量池内存分析

    /** *   栈(Stack) :存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放  在常量池中). 堆(heap):存 ...

  7. HDU 2876 Ellipse&comma; again and again

    转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://acm.hdu.edu.cn/showproblem.php ...

  8. SharePoint 使用技巧汇总与讨论

    1.  网站内容和结构(/_layouts/sitemanager.aspx) 自己使用SharePoint也有一年了,居然没有发现这个页面,鄙视自己一下,才发现这个页对数据进行操作,会方便很多,比如 ...

  9. AT与ATX电源 - 1 系统状态

    ATX与AT电源比较 ATX电源普遍应用在PC中,它有两套电源,一个是正常操作使用:12V,5V,3.3V和-12V,还有一个独立的5V待机电源,所谓的待机电源就是其ON的充要条件是AC输入存在,而正 ...

  10. 1--Testng功能简介

    https://www.yiibai.com/testng/parameterized-test.html