[SCOI2009][bzoj1025]游戏
[SCOI2009][bzoj1025]游戏
标签: DP 置换
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1025
题解
很套路的题目了。
一个置换的复原最少需要次数为所有循环的最小公倍数。
那么就是问能够组成多少种不同的最小公倍数。
这就dp了。
设dp[i][j]代表到了第i个质数,用j组成的方案数。
显然有\(dp[i][j]=\sum dp[i][j-prime[i]^k])\)
代码
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<set>
#include<map>
using namespace std;
#define ll long long
#define REP(i,a,b) for(int i=(a),_end_=(b);i<=_end_;i++)
#define DREP(i,a,b) for(int i=(a),_end_=(b);i>=_end_;i--)
#define EREP(i,a) for(int i=start[(a)];i;i=e[i].next)
inline int read()
{
int sum=0,p=1;char ch=getchar();
while(!(('0'<=ch && ch<='9') || ch=='-'))ch=getchar();
if(ch=='-')p=-1,ch=getchar();
while('0'<=ch && ch<='9')sum=sum*10+ch-48,ch=getchar();
return sum*p;
}
const int maxn=1e3+20;
int n,tot,prime[maxn],mark[maxn];
ll dp[maxn][maxn];
void init()
{
n=read();
REP(i,2,n)
{
if(!mark[i])prime[++tot]=i;
for(int j=1;j<=tot && prime[j]*i<=n;j++)
{
int k=i*prime[j];
mark[k]=1;
if(!(i%prime[j]))break;
}
}
}
void doing()
{
REP(i,0,n)dp[0][i]=1;
REP(i,1,tot)
{
REP(j,0,n)
{
int x=prime[i];dp[i][j]=dp[i-1][j];
while(x<=j)dp[i][j]+=dp[i-1][j-x],x*=prime[i];
}
}
printf("%lld\n",dp[tot][n]);
}
int main()
{
freopen("game.in","r",stdin);
freopen("game.out","w",stdout);
init();
doing();
return 0;
}
[SCOI2009][bzoj1025]游戏的更多相关文章
- 【BZOJ】【1025】【SCOI2009】游戏
DP/整数拆分 整个映射关系可以分解成几个循环(置换群的预备知识?),那么总行数就等于各个循环长度的最小公倍数+1(因为有个第一行的1~N).那么有多少种可能的排数就等于问有多少种可能的最小公倍数. ...
- 【BZOJ1025】[SCOI2009]游戏(动态规划)
[BZOJ1025][SCOI2009]游戏(动态规划) 题面 BZOJ 洛谷 题解 显然就是一个个的置换,那么所谓的行数就是所有循环的大小的\(lcm+1\). 问题等价于把\(n\)拆分成若干个数 ...
- bzoj千题计划116:bzoj1025: [SCOI2009]游戏
http://www.lydsy.com/JudgeOnline/problem.php?id=1025 题目转化: 将n分为任意段,设每段的长度分别为x1,x2,…… 求lcm(xi)的个数 有一个 ...
- 【bzoj1025】[SCOI2009]游戏
1025: [SCOI2009]游戏 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1987 Solved: 1289[Submit][Status] ...
- [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]游戏 (分组背包)
Description windy学会了一种游戏.对于1到N这N个数字,都有唯一 且不同的1到N的数字与之对应.最开始windy把数字按顺序1,2,3,……,N写一排在纸上.然后再在这一排下面写上它们 ...
- BZOJ1025 [SCOI2009]游戏 【置换群 + 背包dp】
题目链接 BZOJ1025 题解 题意就是问一个\(1....n\)的排列在同一个置换不断重复下回到\(1...n\)可能需要的次数的个数 和置换群也没太大关系 我们只需知道同一个置换不断重复,实际上 ...
- 【bzoj1025】【SCOI2009】【游戏】【dp】
Description windy学会了一种游戏.对于1到N这N个数字,都有唯一且不同的1到N的数字与之相应.最開始windy把数字按顺序1,2.3.--,N写一排在纸上. 然后再在这一排以下写上它们 ...
随机推荐
- Python3 的序列
序列 1.根据列表.元组.字符串的共同点把它们统称为序列(他们都是兄弟呀) 1)都可以通过索引来的到每一个元素 2)默认索引值都是从零开始(Python也支持负数索引) 3)都可以通过分片(切片)的方 ...
- MYSQL主从库同步配置过程
MYSQL主从库同步配置过程 为了实现网站数据库的异地备份,采用了MySQL数据库主从同步配置,需要两台服务器分别作为主从库,当主库发生增删改等操作,会实时反映到从库,我的个人服务器配置如下: 主库为 ...
- error: stray '\357' in program编程出错的总结
错误: 编译报错:error: stray '\357' in program 原因:在程序中打入了全角字符 具体分析产生原因: 在编程中,由于打字的快速,按下ctrl键后紧接着按下了space键 ...
- python_鸡兔同笼问题
鸡兔同笼问题 -- 今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何? --鸡和兔在一个笼子里,从上面数,有35个头:从下面数,有94只脚.问笼中各有几只鸡和兔 如何逻辑整理? -- 鸡头和兔子 ...
- Python--socketserve源码分析(一)
class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass 实现原理: s =socketserver.ThreadingTCPServer(参 ...
- 前后端分离之CORS和WebApi
目前的项目是前端mv*+api的方式进行开发的,以前都是没有跨域的方案,前后端人员在同一个解决方案里边进行开发,前端人员要用IIS或VS来开发和调试Api,这样就很不方便,迫切需要跨域访问Api. 评 ...
- editplus和ultraedit(UE)的使用
本来呢我是没有打算写关于editplus和ue的文章的,但是最近我花了12K买了一台电脑,在折腾电脑的时候就重新设置了好多经常用到的工具,以前我使用比较多的是editplus,但是使用这个editpl ...
- 【SqlServer系列】浅谈SQL Server事务与锁(上篇)
一 概述 在数据库方面,对于非DBA的程序员来说,事务与锁是一大难点,针对该难点,本篇文章视图采用图文的方式来与大家一起探讨. “浅谈SQL Server 事务与锁”这个专题共分两篇,上篇主讲事务及 ...
- angular中要注意的指令
1.ng-repeat 遍历集合,给每个元素生成模板实例,每个实例的作用域中可以用一些特殊属性,如下: $index //遍历集合的下标 $first //遍历集合中的第一个对象 $last //遍历 ...
- OpenStack云平台网络模式及其工作机制
转自:http://openstack.csdn.net/content.html?arcid=2808381 OpenStack云平台网络模式及其工作机制 网络,是OpenStack的部署中最容易出 ...