【斯特林数】hdu 3625 Examining the Rooms
2016-11-04 22:18
369 查看
hdu 3625 Examining the Rooms(斯特林数)
第一类斯特林数S(N,K) = (N-1)*S(N-1,K)+S(N-1,K-1)表示的正是N个元素形个K个非空循环排列的方法数。
那么1不能打破的情况下,N个元素形个K个非空循环排列的方法数是:S(N,K)-S(N-1,K-1)
枚举1到k层即可算出满足的方法数。
第一类斯特林数S(N,K) = (N-1)*S(N-1,K)+S(N-1,K-1)表示的正是N个元素形个K个非空循环排列的方法数。
那么1不能打破的情况下,N个元素形个K个非空循环排列的方法数是:S(N,K)-S(N-1,K-1)
枚举1到k层即可算出满足的方法数。
#include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; const int INF = 0x3f3f3f3f; const int N = 25; long long stir1 ; long long d ; void init() { long long sum = 1; for(int i = 1; i <= 20; i++) { sum *= i; d[i] = sum; } for(int i = 1; i <= 20; i++) { stir1[i][0] = 0; stir1[i][i] = 1; for(int j = 1; j < i; j++) stir1[i][j] = stir1[i-1][j]*(i-1) + stir1[i-1][j-1]; } } int main() { init(); int T; scanf("%d",&T); int n,k; while(T--) { scanf("%d%d",&n,&k); long long sum = 0; for(int i = 1; i <= k; i++) sum += stir1 [i]-stir1[n-1][i-1]; printf("%.4lf\n",(double)sum/d ); } return 0; }
相关文章推荐
- HDU 3625 Examining the Rooms 第一类斯特林数
- 斯特林数 - 环排列 学习小记 Hdu 3625 Examining the Rooms + LightOJ 1326 Race
- HDU 3625 Examining the Rooms(10年天津网赛,斯特灵数)
- hdu 3625 Examining the Rooms 轮换斯特林数
- Hdu 3625 Examining the Rooms[第一类斯特林数]
- HDU 3625 Examining the Rooms
- HDOJ 3625 Examining the Rooms 斯特林数
- HDU 3625 Examining the Rooms
- HDU 3625 Examining the Rooms
- HDU 3625 Examining the Rooms
- hdu 3625 Examining the rooms
- HDU 3625 Examining the Rooms
- HDU 3625 Examining the Rooms
- HDOJ题目3625 Examining the Rooms(斯特林第一类数)
- HDU 3625 Examining the Rooms(斯特林数)
- [第一类斯特林数] HDU 3625 Examining the Rooms
- 斯特灵数 hdu 3625 Examining the Rooms
- 【第一类斯特林数】HDU_3625_Examining the Rooms
- HDU 3625 Examining the Rooms(第一类stirling数)
- Examining the Rooms - HDU 3625 第一类斯特林数