题目描述

这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法。大家肯定很清楚,在中国象棋中炮的行走方式是:一个炮攻击到另一个炮,当且仅当它们在同一行或同一列中,且它们之间恰好 有一个棋子。你也来和小可可一起锻炼一下思维吧!

输入输出格式

输入格式:

一行包含两个整数N,M,之间由一个空格隔开。

输出格式:

总共的方案数,由于该值可能很大,只需给出方案数模9999973的结果。

输入输出样例

输入样例#1: 复制

1 3
输出样例#1: 复制

7

说明

样例说明

除了3个格子里都塞满了炮以外,其它方案都是可行的,所以一共有2*2*2-1=7种方案。

数据范围

100%的数据中N和M均不超过100

50%的数据中N和M至少有一个数不超过8

30%的数据中N和M均不超过6

动态规划(组合数+状压,选择合理的状态)

见代码(感谢 @何旭):

 #include<cstdio>
 using namespace std;
 #define mod f[i][j][k]%=9999973
 int n,m;
 ][][];
 long long calc(int x)
 {
     )>>;
 }
 /*
 发个题解,但是我并不打算发程序,下面的程序够详细了,我只是补个思想讲解
 F[I][J][K] 表示已经放了前I行,其中有J列是只放了1个炮,有K列放了2个炮的方案数
 有:(已第三方订正)
 1〉如果第I行不放,有
     F[i][J][K]+=+F[I-1][J][K];
 2〉如果第I行放一个棋子,且这个棋子放在已经放了一个棋子的列上,有
     F[I][J][K]+=F[I-1][J+1][K-1]*(J+1);
 3〉如果第I行放一个棋子,且这个棋子放在已放了0个棋子的列上,有:
     F[I][J][K]+=F[I-1][J-1][K]*(M-J-K+1);
 4〉如果第I列放两个棋子,且两个棋子都放在空列上,有:
     F[I][J][K]+=F[i-1][J-2][K]*(M-J+2-K)*(M-J+1-K) DIV 2;
 5〉如果第I列放两个棋子,且两个棋子一个放在已经放了一个棋子的列,另一个放在放了0个棋子的列。有
     F[I][J][K]+=F[I-1][J+2][K-2]*(J+2)*(J+1)DIV 2 ;
 6〉如果第I列放两个棋子,且这两个棋子都放在已经放过1个棋子的列上,有:
     F[I][J][K]+=F[I-1][J][K-1]*J*(M-J-K+1);
 7〉 F[I][J][K] 的每次累计必须mod 9999973;
 */
 int main()
 {
     scanf("%d%d",&n,&m);
     f[][][]=;
     ; i<=n; i++) {
         ; j<=m; j++) ; k<=m-j; k++) {
                 f[i][j][k]=f[i-][j][k];
                 ) f[i][j][k]+=f[i-][j-][k]*(m-j-k+),mod;
                 ) f[i][j][k]+=f[i-][j+][k-]*(j+),mod;
                 ) f[i][j][k]+=f[i-][j-][k]*calc(m-j+-k),mod;
                 ) f[i][j][k]+=f[i-][j+][k-]*calc(j+),mod;
                 ) f[i][j][k]+=f[i-][j][k-]*j*(m-j-k+),mod;
             }
     }
     ;
     ; i<=m; i++) {
         ; j<=m; j++)
             ans+=f[n][i][j],ans%=;
     }
     printf("%lld\n",ans);
 }

P2051 [AHOI2009]中国象棋的更多相关文章

  1. 洛谷 P2051 [AHOI2009]中国象棋 解题报告

    P2051 [AHOI2009]中国象棋 题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法. ...

  2. 洛谷 P2051 [AHOI2009]中国象棋 状态压缩思想DP

    P2051 [AHOI2009]中国象棋 题意: 给定一个n*m的空棋盘,问合法放置任意多个炮有多少种情况.合法放置的意思是棋子炮不会相互打到. 思路: 这道题我们可以发现因为炮是隔一个棋子可以打出去 ...

  3. Luogu P2051 [AHOI2009]中国象棋(dp)

    P2051 [AHOI2009]中国象棋 题面 题目描述 这次小可可想解决的难题和中国象棋有关,在一个 \(N\) 行 \(M\) 列的棋盘上,让你放若干个炮(可以是 \(0\) 个),使得没有一个炮 ...

  4. [Luogu P2051] [AHOI2009]中国象棋 (状压DP->网格DP)

    题面 传送门:https://www.luogu.org/problemnew/show/P2051 Solution 看到这题,我们不妨先看一下数据范围 30pt:n,m<=6 显然搜索,直接 ...

  5. [洛谷P2051] [AHOI2009]中国象棋

    洛谷题目链接:[AHOI2009]中国象棋 题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法 ...

  6. [P2051 [AHOI2009]中国象棋] DP

    https://www.luogu.org/problemnew/show/P2051 题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一 ...

  7. 洛谷 P2051 [AHOI2009]中国象棋

    题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法.大家肯定很清楚,在中国象棋中炮的行走方式是 ...

  8. P2051 [AHOI2009]中国象棋——DP(我是谁,我在哪,为什么)

    象棋,给你棋盘大小,然后放炮(炮的数量不限),不能让炮打到其他的炮,问方案数: 数据n,m<=200; 状态压缩似乎能做,但是我不会: 因为只要状态数,所以不必纠结每种状态的具体情况: 可以想出 ...

  9. luogu P2051 [AHOI2009]中国象棋

    统计方案,果断 dp 注意到合法方案即为每一行,每一列的棋子数不超过2 设\(f_{i,j,k}\)表示放到第\(i\)行,有\(j\)列可以放2个,有\(k\)列可以放1个的方案 然后就随便讨论一下 ...

随机推荐

  1. Windows 10新功能

    Windows 10 中面向开发人员的新增功能 Windows 10 及新增的开发人员工具将提供新通用 Windows 平台支持的工具.功能和体验.在 Windows 10 上安装完工具和 SDK后, ...

  2. sharepoint 创建个人网站

    One of the SharePoint 2013 puzzle pieces which got some major improvements are My Sites, User Profil ...

  3. CentOS本地yum源配置

    现有一台处在局域网的linux服务器,无法ping通外网,本文是关于本地yum源的配置 环境 : CentOS 6.5 一 .挂载CentOS镜像文件 (1) 创建挂载文件夹,若此文件夹已存在可忽略 ...

  4. ADO.NET知识点

    今天复习到了ADO.NET,就把他们的知识梳理总结出来 ADO.NET 是一组向 .NET 程序员公开数据访问服务的类.提供了对各种关系数据.XML 和应用程序数据的访问. 所有的数据访问类位于Sys ...

  5. jstl 处理Date 时间

    1.引入 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> < ...

  6. Linux系统EXT文件系统

    分区格式化(Linux创建文件系统):(假设需要格式化的分区为/dev/sdb1) 1. ext2文件系统和ext3文件系统的区别: ext2不支持日志文件系统,不会产生日志文件,ext3则会产生日志 ...

  7. LeetCode 162. Find Peak Element (找到峰值)

    A peak element is an element that is greater than its neighbors. Given an input array where num[i] ≠ ...

  8. python常用模块上篇

    python常见模块 分两篇分别介绍下述模块 time模块 random模块 hashlib模块 os模块 sys模块 logging模块 序列号模块 configparser模块 re模块 time ...

  9. 主键乱序插入对Innodb性能的影响

    主键乱序插入对Innodb性能的影响 在平时的mysql文档学习中我们经常会看到这么一句话: MySQL tries to leave space so that future inserts do ...

  10. idea的debug调试快捷键

    1 2 3 4 5 6 7 8 9 10 F9            resume programe 恢复程序 Alt+F10       show execution point 显示执行断点 F8 ...