• 1801: [Ahoi2009]chess 中国象棋


    Time Limit: 10 Sec  Memory Limit: 64 MB
    Submit: 2520  Solved: 1524
    [Submit][Status][Discuss]

    Description

    在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮。 请问有多少种放置方法,中国像棋中炮的行走方式大家应该很清楚吧.

    Input

    一行包含两个整数N,M,中间用空格分开.

    Output

    输出所有的方案数,由于值比较大,输出其mod 9999973

    Sample Input

    1 3

    Sample Output

    7

    HINT

    除了在3个格子中都放满炮的的情况外,其它的都可以.

    100%的数据中N,M不超过100
    50%的数据中,N,M至少有一个数不超过8
    30%的数据中,N,M均不超过6

    Source

    Day2

    每行只存在3中情况,不放,放一个棋子,放两个棋子,标准3进制状压DP

    设动规数组f[i][j][k],表示前i行中,有j列有一个棋子,有k列有两个棋子

    那么第i行有6种放置情况

    1、不放

    2、一个棋子,放到没有棋子的列

    3、一个棋子,放到有一个棋子的列

    4、两个棋子,都放到没有棋子的列

    5、两个棋子,一个放到没有棋子的列,另一个放到有一个棋子的列

    6、两个棋子,两个分别放到有一个棋子的列

    第一次f[i][j][k]忘记取模爆了。。。

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 
     5 #define LL long long
     6 const int mod=9999973;
     7 
     8 LL n,m,ans;
     9 LL f[105][105][105];
    10 
    11 LL C(LL x)
    12 {
    13     return x*(x-1)/2;
    14 }
    15 
    16 int main()
    17 {
    18     cin>>n>>m;
    19     f[0][0][0]=1;
    20     for(int i=1;i<=n;i++)
    21         for(int j=0;j<=m;j++)
    22             for(int k=0;k<=m-j;k++)
    23             {
    24                 f[i][j][k]=f[i-1][j][k];
    25                 if(j) f[i][j][k]+=f[i-1][j-1][k]*(m-j-k+1);
    26                 if(j+1<=m&&k) f[i][j][k]+=f[i-1][j+1][k-1]*(j+1);
    27                 if(j>=2) f[i][j][k]+=f[i-1][j-2][k]*C(m-j-k+2);
    28                 if(j&&k) f[i][j][k]+=f[i-1][j][k-1]*(m-j-k+1)*j;
    29                 if(j+2<=m&&k>=2)f[i][j][k]+=f[i-1][j+2][k-2]*C(j+2);
    30                 f[i][j][k]%=mod;
    31             }
    32     for(int j=0;j<=m;j++)
    33         for(int k=0;k<=m-j;k++)
    34             ans+=f[n][j][k];
    35     ans%=mod;
    36     cout<<ans;
    37     return 0;
    38 }
  • 相关阅读:
    VMware克隆虚拟机
    3种Redis分布式锁的对比
    高并发下缓存与数据库双写不一致解决方案
    30分钟Maven入门到精通
    Linux安装rabbitmq (解决guest无法登陆问题)
    RocketMQ高性能原理(pushConsumer,CommitLog,ZeroCopy)
    XA 分布式事务原理(转)
    SpringBoot学习(八)RestTemplate/WebClient 调用REST服务、Validation校验和发邮件
    @Valid和@Validated的总结区分(转)
    Dubbo 同步调用原理(转)
  • 原文地址:https://www.cnblogs.com/InWILL/p/10035550.html
Copyright © 2020-2023  润新知