2 条题解

  • 0
    @ 2025-10-8 17:11:31
    /* http://www.cnblogs.com/karl07/ */
    #include <cstdlib>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    
    #define ll long long 
    //#define P 9999973 //bzoj1801
    #define P 999983 //bzoj4806
    #define C(x) ((x)*(x-1)/2)
    int n,m;
    ll f[105][105][105];
    
    int main(){
        scanf("%d%d",&n,&m);
        f[0][0][0]=1;
        for (int i=1;i<=n;i++){
            for (int j=0;j<=m;j++){
                for (int k=0;k<=m-j;k++){
                    f[i][j][k] += f[i-1][j][k];
                    if (j>=1)          f[i][j][k] += f[i-1][j-1][k]*(m-j-k+1);
                    if (k>=1 && j<=m-1)f[i][j][k] += f[i-1][j+1][k-1]*(j+1);
                    if (j>=2)          f[i][j][k] += f[i-1][j-2][k]*C(m-j-k+2);
                    if (k>=2 && j<=m-2)f[i][j][k] += f[i-1][j+2][k-2]*C(j+2);
                    if (j>=1 && k>=1)  f[i][j][k] += f[i-1][j][k-1]*j*(m-j-k+1);
                    f[i][j][k] %= P;
                }
            }
        }
        ll ans=0;
        for (int i=0;i<=m;i++){
            for (int j=0;j<=m-i;j++){
                ans += f[n][i][j];
                ans %= P;
            }
        }
        printf("%lld\n",ans);
        return 0;
    }
    
    • 0
      @ 2025-10-8 17:11:18
      /* http://www.cnblogs.com/karl07/ */
      #include <cstdlib>
      #include <cstdio>
      #include <cstring>
      #include <cmath>
      #include <algorithm>
      using namespace std;
      
      #define ll long long 
      //#define P 9999973 //bzoj1801
      #define P 999983 //bzoj4806
      #define C(x) ((x)*(x-1)/2)
      int n,m;
      ll f[105][105][105];
      
      int main(){
          scanf("%d%d",&n,&m);
          f[0][0][0]=1;
          for (int i=1;i<=n;i++){
              for (int j=0;j<=m;j++){
                  for (int k=0;k<=m-j;k++){
                      f[i][j][k] += f[i-1][j][k];
                      if (j>=1)          f[i][j][k] += f[i-1][j-1][k]*(m-j-k+1);
                      if (k>=1 && j<=m-1)f[i][j][k] += f[i-1][j+1][k-1]*(j+1);
                      if (j>=2)          f[i][j][k] += f[i-1][j-2][k]*C(m-j-k+2);
                      if (k>=2 && j<=m-2)f[i][j][k] += f[i-1][j+2][k-2]*C(j+2);
                      if (j>=1 && k>=1)  f[i][j][k] += f[i-1][j][k-1]*j*(m-j-k+1);
                      f[i][j][k] %= P;
                  }
              }
          }
          ll ans=0;
          for (int i=0;i<=m;i++){
              for (int j=0;j<=m-i;j++){
                  ans += f[n][i][j];
                  ans %= P;
              }
          }
          printf("%lld\n",ans);
          return 0;
      }
      • 1

      信息

      ID
      6475
      时间
      1000ms
      内存
      256MiB
      难度
      10
      标签
      递交数
      5
      已通过
      2
      上传者