SGU 441

来源:互联网 发布:化学查询软件下载 编辑:程序博客网 时间:2024/06/05 19:29

题目连接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=26460#problem/I

这是一个把“把n个不同的物品装到k个没有区别的盒子里的方法数的问题(且每个盒子不能为空)”。

第二类斯特林数:

s(m,n)表示把m个有区别的球放到n个相同的盒子中,且无一空盒,其不同的方案数。

s(m,n)=ns(m-1,n)+s(m-1,n-1)     (m>=n)

s(m,n)=0   (m<n)

s(0,0)=1;

 

[cpp] view plaincopy
  1. long long data[N][N];  
  2. void stirling(int m, int n)  
  3. {  
  4.         int min, i, j;  
  5.     memset(data,0,sizeof(data));  
  6.         data[0][0] = 1;   
  7.       
  8.         for( i = 1; i <= m; ++i ){  
  9.              if( i < n ) min = i;  
  10.              else min = n;  
  11.              for( j = 1; j <= min; ++j ){  
  12.                   data[i][j] = ((long long)j*data[i-1][j] + data[i-1][j-1])% mod;  
  13.              }  
  14.         }  
  15. }  
  16. 但是这么递归的话,会超时,则需要用到矩阵快速幂来做。
  17. 和POJ的3070很相似http://blog.csdn.net/sdj222555/article/details/7214322。
  18. 这里求矩阵的快速幂,和求a^b的快速幂的求法很相似。
  19. 这里是转自别人的连接:http://blog.csdn.net/acm_cxlove/article/details/7858026

 

 

原创粉丝点击