SDUT2883 Hearthstone//Stirling
第五届省赛:Hearthstone
组合数学。
n个比赛,m个桌子(n>=m)。每个比赛一个桌子,每个桌子至少使用一次。
拿到题之后的思路一直是n个位置如何填满m个桌子。
其实是道stirling数模型,直接套公式 m!*{n m}
#include <stdio.h> #include<string.h> #define L 1000000007 int main(){ int n,m; long long a[101]; while(scanf("%d%d",&n,&m)!=EOF){ a[0]=0; for (int i=1;i<=n;i++) a[i]=1; for (int i=3;i<=n;i++) for (int j=i-1;j>0;j--) a[j]=(j*a[j]%L+a[j-1])%L; for (int i=1;i<=m;i++) a[m]=((a[m]%L)*i)%L; printf("%lld\n",a[m]); } return 1; }
一开始没过,后来把数组开成long long就行了>_<