Homework of PE dp 正难则反
来源:互联网 发布:淘宝商家怎么进天猫 编辑:程序博客网 时间:2024/06/02 05:19
http://116.56.140.75:8000/JudgeOnline/problem.php?cid=1075&pid=3
Problem D: Homework of PE
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 117 Solved: 37
[Submit][Status][Web Board]
Description
At the begining of PE class, the math teacher comes to the class,
and says that the PE teacher has a sick.
So the math teacher gives Nobita a math homework.
The teacher says that s(n) indicates the number of primes in range [1,n].
And the teacher also says that for a permutation of 1-n, if the number x is in the xth position from left,
we say that x is in a correct position.
And then teacher wants to know.
For all permutation of 1-n, how many of them can satisfy that,
for all s(n) primes in range [1,n], there are exactly m of them are in the correct position.
And because the answer is so big, so Nobita needs to know the answer % 1000000007.
Input
The first line contains two integers n and m.
(1<=n<=200, 1<=m<=s(n)).
Output
Output the answer % 1000000007.
Sample Input
5 1
Sample Output
42
F[i][j]表示有i个数(由j个质数和(i-j)个质数)组成,j个质数不在自己位置上的方案数,
正难则反,
f[i][j]=jie[i]-sigma(f[i-k][j-k])(0
#include <bits/stdc++.h>#define LL long longusing namespace std;const int MAXN = 205;const int P = (int)1e9 + 7;LL jie[MAXN];LL c[MAXN][MAXN];LL f[MAXN][MAXN];bool is_prime(int x){ for(int i=2;i*i<=x;++i){ if(x % i == 0) return false; } return true;}void init(const int n){ jie[0] = 1; for(int i=1;i<=n;++i) jie[i] = jie[i - 1] * i % P; for(int i=0;i<=n;++i){ for(int j=0;j<=i;++j){ c[i][j] = j == 0 ? 1 : (c[i - 1][j] + c[i - 1][j - 1]) % P; } }}LL solve(const int n,const int m){ init(n); int s = 0; for(int i=2;i<=n;++i){ if(is_prime(i)) ++s; } memset(f,0,sizeof f); for(int i=1;i<=n;++i){ for(int j=0;j<=s;++j){ LL tmp = 0; for(int k=1;k<=j;++k) (tmp += c[j][k] * f[i - k][j - k] % P) %= P; f[i][j] = (jie[i] - tmp + P) % P; } } return f[n - m][s - m] * c[s][m] % P;}int main(){ int n,m; while(~scanf("%d %d",&n,&m)){ printf("%d\n",(int)solve(n,m)); } return 0;}
- Homework of PE dp 正难则反
- Doing Homework again(dp)
- hdoj1074_Doing Homework(dp)
- poj1991Turning in Homework(dp)
- hdu_1074_Doing Homework(状压DP)
- Doing Homework HDU1074 【dp】
- 状压dp Doing Homework
- Homework of English
- HDU1074 - Doing Homework(状压DP)
- Doing Homework(数塔型状态DP)
- hdu1074Doing Homework dp+状态压缩
- hdu1074:doing homework(状压dp)
- 训练之DP-Doing homework
- hdu 1074 Doing Homework(dp)
- uvalive 6697 - Homework Evaluation - dp
- Doing Homework (状压dp)
- [HDU1074] Doing homework 状压DP
- hdu1074 Doing Homework 【状压dp】
- linux内核分析——CFS(完全公平调度算法)
- Linux中yum和apt-get
- Linux内核编程视频教程
- 进程调度(进程优先级和nice值)
- 申嵌嵌入式学习视频
- Homework of PE dp 正难则反
- hdu 2509 Be the Winner
- 如何才能成为超级人类,驯服人工智能?
- 改变你人生的,也许只是一个瞬间—顶级互联网公司工作方法
- 闲谈数学与军事之二
- SpringMVC @RestControllerAdvice Shiro 学习链接 人人权限系统 参考
- 斯坦福大学深度学习公开课cs231n学习笔记(3)最优化方法:梯度下降
- 项目管理--maven浅析《二》之管理SSH项目整合开发
- 二进制时间-LintCode