洛谷 - P1655 小朋友的球
由题解题意可知,就是求第二类斯特灵数
dp会吧……高精会吧……
#include<bits/stdc++.h>
using namespace std;
string add(string a,string b){
string ans;
int na[1005]={0},nb[1005]={0};
int la=a.size(),lb=b.size();
for(int i=0;i<la;i++)na[la-1-i]=a[i]-'0';
for(int i=0;i<lb;i++)nb[lb-1-i]=b[i]-'0';
int lmax=la>lb?la:lb;
for(int i=0;i<lmax;i++)na[i]+=nb[i],na[i+1]+=na[i]/10,na[i]%=10;
if(na[lmax])lmax++;
for(int i=lmax-1;i>=0;i--)ans+=na[i]+'0';
return ans;
}
int na[1005];
string mul(string a,int b){
string ans;
int La=a.size();
fill(na,na+1005,0);
for(int i=La-1;i>=0;i--)na[La-i-1]=a[i]-'0';
int w=0;
for(int i=0;i<La;i++)na[i]=na[i]*b+w,w=na[i]/10,na[i]=na[i]%10;
while(w)na[La++]=w%10,w/=10;
La--;
while(La>=0)ans+=na[La--]+'0';
return ans;
}
int n,m;
string f[105][105];
int main(){
for(int i=1;i<=100;i++)f[i][1]="1";
for(int i=2;i<=100;i++)for(int j=1;j<=i;j++)f[i][j]=add(f[i-1][j-1],mul(f[i-1][j],j));
while(cin>>n>>m){
if(n<m)print f("0\n");
else cout<<f[n][m]<<endl;
}
return 0;
}
高精加是题解1扒下来的,赞美题解

浙公网安备 33010602011771号