1801: [Ahoi2009]chess 中国象棋

Time Limit: 10 Sec  Memory Limit: 64 MB
Submit: 1426  Solved: 826
[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
----------------------------------------------------------

将题目化简为设计01矩阵 每一行每一列至多2个1。求有几种方案。

设f[i][j][k]代表到第i行有j列放了1个象棋k列放了0个象棋有两个象棋的列不用考虑因为不能再放了。

递推方程如下:

  f[i][j][k]=f[i-1][j][k] 第i行不放。

  f[i][j][k]+=f[i-1][j-1][k+1]*(k+1) 在i-1行中任选一列(该列的棋子数=0)后面放一颗。有 k+1种放法。

  f[i][j][k]+=f[i-1][j+1][k]*(j+1)     选一列(该列棋子数=1)

  f[i][j][k]+=f[i-1][j][k+1]*j*(k+1) 选两列 一列棋子数=1 一列棋子数=0

  f[i][j][k]+=f[i-1][j-2][k+2]*(k+2)*(k+1)/2 选两列棋子数=0的

  f[i][j][k]+=f[i-1][j+2][k]*(j+2)*(j+1)/2      选两列棋子数=1的

最后统计 f[n][i][j]    0<=i,j<=m;

代码如下:

 #include<cstdio>
#include<iostream>
#define MOD 9999973
#define MAXN 105
#define For(i,x,y) for(int i=x;i<=y;++i)
using namespace std;
long long f[MAXN][MAXN][MAXN];
int main()
{
int n,m;cin>>n>>m;
f[][][m]=;
f[][][m-]=m;
f[][][m-]=m*(m-)/;
For(i,,n)
{
For(j,,m)
{
For(k,,m)
{
f[i][j][k]=(f[i-][j][k]+f[i-][j-][k+]*(k+)%MOD+f[i-][j+][k]*(j+)%MOD)%MOD+f[i-][j][k+]*j*(k+)%MOD;
f[i][j][k]+=(f[i-][j-][k+]*(k+)*(k+)/)%MOD+f[i-][j+][k]*(j+)*(j+)/;
f[i][j][k]%=MOD;
}
}
}
long long ans=;
For(i,,m)
{
For(j,,m)
{
ans+=f[n][i][j];
ans%=MOD;
}
}
printf("%lld",ans);
}

  

BZOJ 1801中国象棋 DP的更多相关文章

  1. BZOJ 1801: [Ahoi2009]chess 中国象棋( dp )

    dp(i, j, k)表示考虑了前i行, 放了0个炮的有j列, 放了1个炮的有k列. 时间复杂度O(NM^2) -------------------------------------------- ...

  2. BZOJ 1801--中国象棋(DP)

    1801: [Ahoi2009]chess 中国象棋 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1995  Solved: 1160[Submit] ...

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

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

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

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

  5. 【BZOJ1801】[Ahoi2009]chess 中国象棋 DP

    [BZOJ1801][Ahoi2009]chess 中国象棋 Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮 ...

  6. BZOJ 1801: [Ahoi2009]chess 中国象棋 [DP 组合计数]

    http://www.lydsy.com/JudgeOnline/problem.php?id=1801 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放 ...

  7. JZOJ 1667 ( bzoj 1801 ) [ AHOI 2009 ] 中国象棋 —— DP

    题目:https://jzoj.net/senior/#main/show/1667 首先,一行.一列最多只有 2 个炮: 所以记录一下之前有多少行有 0/1/2 个炮,转移即可: 注意取模!小心在某 ...

  8. bzoj1801: [Ahoi2009]chess 中国象棋 dp

    题意:在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮的行走方式大家应该很清楚吧. 题解:dp[i][j][k]表示到了第i行,有j列 ...

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

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

随机推荐

  1. CALayer anchorPoint 锚点始终为(0,0)

    objc.io 学习 摘自原处修改 对层的属性详细了解可见这里 @interface ClockFace : CAShapeLayer@property (nonatomic, strong) NSD ...

  2. java发送http的get、post请求[转]

    原文链接:http://www.cnblogs.com/zhuawang/archive/2012/12/08/2809380.html package wzh.Http; import java.i ...

  3. java数据结构_附12_图、顶点和边的定义(双链存储)

    图--双链式存储结构 顶点 和 边 的定义 1.Vertex.java 2.Edge.java 3.AbstractGraph.java 1. public class Vertex {private ...

  4. AJAX JSONP源码实现(原理解析)

    关于JSONP以及跨域问题,请自行搜索. 本文重点给出AJAX JSONP的模拟实现代码,代码中JSONP的基本原理也一目了然. <html xmlns="http://www.w3. ...

  5. 了解JavaScript

    JavaScript是什么? JavaScript是一种可以用来给网页增加交互性的编程语言. JavaScript是一种面向对象的语言. JavaScript和Java之间没有太大的关系. JavaS ...

  6. 硬件抽象层——HAL

    (一)为什么要在android中加入HAL Linux系统中Linux驱动有两种类型的代码:访问硬件寄存器的代码——调用的Linux内核的标准函数进行的标准操作  业务逻辑代码——有些企业或个人并不想 ...

  7. docker 源码分析 四(基于1.8.2版本),Docker镜像的获取和存储

    前段时间一直忙些其他事情,docker源码分析的事情耽搁了,今天接着写,上一章了解了docker client 和 docker daemon(会启动一个http server)是C/S的结构,cli ...

  8. NUBWO/狼博旺 NO-3000台式电脑耳机头戴式游戏电竞语音耳麦带话筒

    产品名称:NUBWO/狼博旺 NO-3000 套餐类型: 官方标配 颜色分类: 蓝色耳机(发光) 黑蓝7.1声道USB 黑色 黑蓝色(发光) 黑蓝色 黑蓝单插孔 白色(发光) 白色 佩戴方式: 头戴护 ...

  9. ios控制器生命周期详解

    #import "MyOneViewController.h" @interface MyOneViewController () @property (nonatomic, st ...

  10. Java常用的输入输出方法

    对于经常上机刷题的来说,首先得解决输入输出方法,Java的输入输出流在Java学习过程的后面部分才会接触,但是我们可以掌握一些简单的,常用的输入输出方法 首先输出 大家最熟悉的莫过于输出方法,直接用S ...