zoukankan      html  css  js  c++  java
  • 洛谷 P2051 中国象棋 题解

    题面

    状态可能不太好想,设f[i][j][k]表示前i行其中有j行是放一个炮,有k行是放两个炮的合法方案数;

    那么:

        f[i+1][j][k]+=f[i][j][k]     在这一行不放任何棋子;

        f[i+1][j+1][k]+=f[i][j][k]*(m-k-j);  在剩余的m-k-j个空行中随机选择一个放下一个炮;

        f[i+1][j-1][k+1]+=f[i][j][k]*(j);  在有一个棋子的j行中随机选择一个放下一个炮,则拥有两个炮的行数便加1;

        f[i+1][j-2][k]+=f[i][j][k]*C(m-k-j,2);  在剩余的m-k-j个空行中随机选择两个不相同的行(利用组合数);

        f[i+1][j][k+1]+=f[i][j][k]*(m-k-j)*j;   选择一个放了一个炮的行和一个没放炮的行各放一个炮;

        f[i+1][j-2][k+2]+=f[i][j][k]*C(j,2);  选择两个放了一个炮的行各放一个炮;

    注意数组的下标不可以是负数!!!!!

    ans就是sigma(f[n][j][k])(j+k<=m)

    注意边界处理 ,a[0][0][0]=1;

    #include <bits/stdc++.h>
    #define int long long
    #define p 9999973
    using namespace std;
    int N,M;
    int f[110][110][110];
    int C(int n)
    {
        return n*(n-1)/2;
    }
    signed main()
    {
        cin>>N>>M;
        f[0][0][0]=1;
        for(int i=0;i<N;i++){
            for(int j=0;j<=M;j++){
                for(int k=0;k+j<=M;k++){
                    f[i+1][j][k]=(f[i+1][j][k]+f[i][j][k])%p;
                    if(M-k-j>=1) f[i+1][j+1][k]=(f[i+1][j+1][k]+f[i][j][k]*(M-k-j))%p;
                    if(j>=1) f[i+1][j-1][k+1]=(f[i+1][j-1][k+1]+f[i][j][k]*j)%p;
                    if(M-k-j>=2) f[i+1][j+2][k]=(f[i+1][j+2][k]+f[i][j][k]*C(M-j-k))%p;
                    if(M-j-k>=1&&j>=1)f[i+1][j][k+1]=(f[i+1][j][k+1]+f[i][j][k]*(M-j-k)*j)%p;
                    if(j>=2) f[i+1][j-2][k+2]=(f[i+1][j-2][k+2]+f[i][j][k]*C(j))%p;
                }
            }
        }
        long long ans=0;
        for(int i=0;i<=M;i++){
            for(int j=0;i+j<=M;j++){
                ans=(ans+f[N][i][j])%p;
            }
        }
        cout<<ans;
    }
  • 相关阅读:
    关闭编辑easyui datagrid table
    sql 保留两位小数+四舍五入
    easyui DataGrid 工具类之 util js
    easyui DataGrid 工具类之 后台生成列
    easyui DataGrid 工具类之 WorkbookUtil class
    easyui DataGrid 工具类之 TableUtil class
    easyui DataGrid 工具类之 Utils class
    easyui DataGrid 工具类之 列属性class
    oracle 卸载
    “云时代架构”经典文章阅读感想七
  • 原文地址:https://www.cnblogs.com/kamimxr/p/11396731.html
Copyright © 2011-2022 走看看