2 条题解

  • 0
    @ 2025-10-8 16:50:30

    G46 第二类斯特林数 斯特林子集数

    G46 第二类斯特林数 斯特林子集数(内网)

    dfs版:

    #include<bits/stdc++.h>
    using namespace std;
    typedef __int128 int128;
    int128 f[50][50];
    int128 dfs(int n,int k)
    {
        if(k==1||n==k)return 1;
        if(f[n][k]!=0)return f[n][k];
        return f[n][k]=dfs(n-1,k-1)+k*dfs(n-1,k);
    }
    template<typename T>void qw(T x)
    {
    	if(x>9)qw(x/10);
    	putchar(x%10+48);
    }
    int main()
    {
        int n,k;scanf("%d%d",&n,&k);
        memset(f,0,sizeof(f));
        qw(dfs(n,k));
        return 0;
    }
    

    常规版:

    #include<bits/stdc++.h>
    using namespace std;
    const int N = 55;
    __int128 f[N][N];
    template<typename T>void qw(T x)
    {
    	if(x/10)qw(x/10);
    	putchar(x%10+48); 
    }
    int main()
    {
    	int n, m;scanf("%d%d",&n,&m);
    	f[0][0]=1;
    	for(int i=1; i<=n; i++)
    		for(int j=1; j<=i; j++)
    			f[i][j]=f[i-1][j-1]+j*f[i-1][j];
    	qw(f[n][m]);
    	return 0;
    }
    
    • 0
      @ 2025-10-8 16:50:21

      G46 第二类斯特林数 斯特林子集数

      G46 第二类斯特林数 斯特林子集数(内网)

      dfs版:

      #include<bits/stdc++.h>
      using namespace std;
      typedef __int128 int128;
      int128 f[50][50];
      int128 dfs(int n,int k)
      {
          if(k==1||n==k)return 1;
          if(f[n][k]!=0)return f[n][k];
          return f[n][k]=dfs(n-1,k-1)+k*dfs(n-1,k);
      }
      template<typename T>void qw(T x)
      {
      	if(x>9)qw(x/10);
      	putchar(x%10+48);
      }
      int main()
      {
          int n,k;scanf("%d%d",&n,&k);
          memset(f,0,sizeof(f));
          qw(dfs(n,k));
          return 0;
      }

      常规版:

      #include<bits/stdc++.h>
      using namespace std;
      const int N = 55;
      __int128 f[N][N];
      template<typename T>void qw(T x)
      {
      	if(x/10)qw(x/10);
      	putchar(x%10+48); 
      }
      int main()
      {
      	int n, m;scanf("%d%d",&n,&m);
      	f[0][0]=1;
      	for(int i=1; i<=n; i++)
      		for(int j=1; j<=i; j++)
      			f[i][j]=f[i-1][j-1]+j*f[i-1][j];
      	qw(f[n][m]);
      	return 0;
      }


      • 1

      G46*【组合数:第二类斯特林数(斯特林子集数)】第二类斯特林数

      信息

      ID
      448
      时间
      1000ms
      内存
      128MiB
      难度
      7
      标签
      递交数
      94
      已通过
      21
      上传者