1 条题解
-
0
思路
无标号非空子集,第二类斯特林递推;n<30仍可能超64位,需精确整数。
参考程序(C++11)
#include <bits/stdc++.h> using namespace std; string calc(string a,string b,int k){string c;int carry=0;for(int i=(int)a.size()-1,j=(int)b.size()-1;i>=0||j>=0||carry;i--,j--){carry+=(i>=0?a[i]-'0':0)+k*(j>=0?b[j]-'0':0);c+=char('0'+carry%10);carry/=10;}if(c.empty())return "0";reverse(c.begin(),c.end());return c;}int main(){int n,k;cin>>n>>k;string d[30][30];for(auto &row:d)for(auto &x:row)x="0";d[0][0]="1";for(int i=1;i<=n;i++)for(int j=1;j<=i;j++)d[i][j]=calc(d[i-1][j-1],d[i-1][j],j);cout<<d[n][k]<<'\n';}
- 1