洛谷 - 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扒下来的,赞美题解

posted @ 2025-03-04 20:52  yzc_is_SadBee  阅读(9)  评论(0)    收藏  举报