BZOJ 1025 分组背包 置换
2017-01-19 09:40
316 查看
Description
windy学会了一种游戏。对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应。最开始windy把数字按
顺序1,2,3,……,N写一排在纸上。然后再在这一排下面写上它们对应的数字。然后又在新的一排下面写上它们
对应的数字。如此反复,直到序列再次变为1,2,3,……,N。
如: 1 2 3 4 5 6 对应的关系为 1->2 2->3 3->1 4->5 5->4 6->6
windy的操作如下
1 2 3 4 5 6
2 3 1 5 4 6
3 1 2 4 5 6
1 2 3 5 4 6
2 3 1 4 5 6
3 1 2 5 4 6
1 2 3 4 5 6
这时,我们就有若干排1到N的排列,上例中有7排。现在windy想知道,对于所有可能的对应关系,有多少种可
能的排数。
Input
包含一个整数N,1 <= N <= 1000
Output
包含一个整数,可能的排数。
Sample Input
【输入样例一】
3
【输入样例二】
10
Sample Output
【输出样例一】
3
【输出样例二】
16
解题思路:
![](http://img.blog.csdn.net/20170119093935130?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvanVzdF9zb3J0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
代码如下:
windy学会了一种游戏。对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应。最开始windy把数字按
顺序1,2,3,……,N写一排在纸上。然后再在这一排下面写上它们对应的数字。然后又在新的一排下面写上它们
对应的数字。如此反复,直到序列再次变为1,2,3,……,N。
如: 1 2 3 4 5 6 对应的关系为 1->2 2->3 3->1 4->5 5->4 6->6
windy的操作如下
1 2 3 4 5 6
2 3 1 5 4 6
3 1 2 4 5 6
1 2 3 5 4 6
2 3 1 4 5 6
3 1 2 5 4 6
1 2 3 4 5 6
这时,我们就有若干排1到N的排列,上例中有7排。现在windy想知道,对于所有可能的对应关系,有多少种可
能的排数。
Input
包含一个整数N,1 <= N <= 1000
Output
包含一个整数,可能的排数。
Sample Input
【输入样例一】
3
【输入样例二】
10
Sample Output
【输出样例一】
3
【输出样例二】
16
解题思路:
代码如下:
#include <bits/stdc++.h> using namespace std; const int N = 1010; int prime , cnt; bool vis[N+10]; long long dp ; void pre_init(){ for(int i = 2; i <= N; i++){ if(!vis[i]){ prime[++cnt] = i; } for(int j = 1; j <= cnt && i * prime[j] <= 1000; j++){ vis[i*prime[j]] = 1; if(i % prime[j] == 0) break; } } } int main(){ pre_init(); int n; scanf("%d", &n); for(int i = 0; i <= cnt; i++) dp[i][0] = 1LL; for(int i = 1; i <= n; i++) dp[0][i] = 1LL; for(int i = 1; i <= cnt; i++){ for(int j = 1; j <= n; j++){ dp[i][j] = dp[i-1][j]; for(int k = prime[i]; k <= j; k *= prime[i]){ dp[i][j] += dp[i - 1][j - k]; } } } printf("%lld\n", dp[cnt] ); return 0; }
相关文章推荐
- bzoj 1025: [SCOI2009]游戏 (置换+分组背包)
- [bzoj1025][SCOI2009]游戏 (分组背包)
- [BZOJ1025][SCOI2009]游戏(置换+背包dp+数学相关)
- bzoj1296 [SCOI2009]粉刷匠 ( 分组背包DP )
- bzoj1190 [HNOI2007]梦幻岛宝珠 ( 二进制分组优化背包DP)
- [bzoj1190][HNOI2007]梦幻岛宝珠 分组背包
- BZOJ.1025.[SCOI2009]游戏(背包DP)
- bzoj1025 [SCOI2009]游戏(数论+背包dp)
- 【BZOJ1025】[SCOI2009]游戏【计数DP】【质因数分解】【置换】
- poj 3590 The shuffle Problem (置换+分组背包)
- bzoj1025 [SCOI2009]游戏(置换+分组背包)
- [BZOJ1025]SCOI2009游戏|置换的循环|DP
- BZOJ 1025: [SCOI2009]游戏 背包DP
- BZOJ 1025: [SCOI2009]游戏( 背包dp )
- 【BZOJ1004】【HNOI2008】Cards 群论 置换 burnside引理 背包DP
- [Bzoj1296][Scoi2009] 粉刷匠 [DP + 分组背包]
- bzoj1296 [SCOI2009]粉刷匠 分组背包/单调队列优化
- 杭电4341-Gold miner(分组背包)
- 【bzoj2427】【软件安装】tarjan缩点+树形依赖背包
- 【bzoj1296】【[SCOI2009]粉刷匠】多次背包dp及小小的优化