【BZOJ1801】[Ahoi2009]chess 中国象棋

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

题解:用f[k][i][j]表示前k行,有i列有1个炮,有j列有2个炮,即有k-i-j列有0个炮 的方案数

分以下情况讨论:

1.不放炮

2.放一个炮:a.在原本没有炮的列放

        b.在原本有1个炮的列放

3.放两个炮:a.在原本没有炮的两列放

        b.在原本有一个炮的两列放

      c.一个在原本没有炮的列放,一个在原本有炮的列放

方程自己YY吧~

#include <cstdio>
#include <iostream>
#include <cstring>
#define mod 9999973ll
using namespace std;
typedef long long ll;
ll f[2][110][110],c[110][110];
ll n,m,ans;
int main()
{
scanf("%d%d",&n,&m);
int i,j,k;
f[0][0][0]=1,c[0][0]=1;
for(i=1;i<=m;i++)
{
c[i][0]=1;
for(j=1;j<=2;j++) c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;
}
for(k=1;k<=n;k++)
{
for(i=0;i<=m;i++)
{
for(j=0;i+j<=m;j++)
{
f[k&1][i][j]=f[(k&1)^1][i][j];
if(i) f[k&1][i][j]+=f[(k&1)^1][i-1][j]*(m-i-j+1);
f[k&1][i][j]%=mod;
if(j) f[k&1][i][j]+=f[(k&1)^1][i+1][j-1]*(i+1);
f[k&1][i][j]%=mod;
if(j) f[k&1][i][j]+=f[(k&1)^1][i][j-1]*(m-i-j+1)*i;
f[k&1][i][j]%=mod;
if(j>1) f[k&1][i][j]+=f[(k&1)^1][i+2][j-2]*c[i+2][2];
f[k&1][i][j]%=mod;
if(i>1) f[k&1][i][j]+=f[(k&1)^1][i-2][j]*c[m-i-j+2][2];
f[k&1][i][j]%=mod;
}
}
}
for(i=0;i<=m;i++) for(j=0;i+j<=m;j++) ans=(ans+f[n&1][i][j])%mod;
printf("%lld",ans);
return 0;
}

【BZOJ1801】[Ahoi2009]chess 中国象棋 DP的更多相关文章

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

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

  2. BZOJ1801 Ahoi2009 chess 中国象棋 【DP+组合计数】*

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

  3. bzoj1801: [Ahoi2009]chess 中国象棋(DP)

    1801: [Ahoi2009]chess 中国象棋 题目:传送门 题解: 表示自己的DP菜的抠脚 %题解... 定义f[i][j][k]表示前i行 仅有一个棋子的有j列 有两个棋子的有k个 的方案数 ...

  4. BZOJ1801 [Ahoi2009]chess 中国象棋(DP, 计数)

    题目链接 [Ahoi2009]chess 中国象棋 设$f[i][j][k]$为前i行,$j$列放了1个棋子,$k$列放了2个棋子的方案数 分6种情况讨论,依次状态转移. #include <b ...

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

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

  6. [luogu2051][bzoj1801][AHOI2009]chess中国象棋【动态规划】

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

  7. BZOJ1801 [Ahoi2009]chess 中国象棋 【dp】

    题目 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮的行走方式大家应该很清楚吧. 输入格式 一行包含两个整数N,M,中间用空格分开. ...

  8. BZOJ1801 [Ahoi2009]chess 中国象棋 动态规划

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1801 题意概括 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请 ...

  9. BZOJ1801:[Ahoi2009]chess 中国象棋

    Time Limit: 10 Sec  Memory Limit: 64 MB Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置 ...

随机推荐

  1. iOS边练边学--定时任务和HUD

    九宫格计算思路 利用控件的索引index计算出控件所在的行号和列号 利用列号计算控件的x值 利用行号计算控件的y值 HUD 其他说法:指示器.遮盖.蒙板 半透明HUD的做法 背景色设置为半透明颜色 定 ...

  2. Entity Framework应用:Code First的实体继承模式

    Entity Framework的Code First模式有三种实体继承模式 1.Table per Type (TPT)继承 2.Table per Class Hierarchy(TPH)继承 3 ...

  3. javascript 复制与粘贴操作

    <script language="javascript"> function readTxt() { alert(window.clipboardData.getDa ...

  4. html5 websocket + node.js 实现网页聊天室

    1 client:    socket.io server:   node.js +  express  + socket.io 一个简单的聊天室  demo,没有注册,内置了一些测试用户 2 cli ...

  5. openfire数据库mysql配置

    <?php return array( //'配置项'=>'配置值' //'USERNAME'=>'admin', //赋值 //数据库配置信息 'DB_TYPE' => 'm ...

  6. 关于win7下安卓开发环境的搭建

    一.下载安装JDK(不用配置环境变量) 1.先卸载原来存在的JDK 控制面板-卸载程序-有两个软件(Java SE Development Kit 8 Update 101(64-bit)和Java ...

  7. Spring Boot 官方文档学习(一)入门及使用

    个人说明:本文内容都是从为知笔记上复制过来的,样式难免走样,以后再修改吧.另外,本文可以看作官方文档的选择性的翻译(大部分),以及个人使用经验及问题. 其他说明:如果对Spring Boot没有概念, ...

  8. web 开发之酷炫--- 酷炫展示

    http://www.cnblogs.com/dsxniubility/p/4588560.html

  9. 最短路径问题-Floyd算法

    概念 最短路径也是图的一个应用,即寻找图中某两个顶点的最短路径长度. 实际应用:例如确定某两个城市间的坐火车最短行车路线长度等. Floyd algorithm 中文名就是弗洛伊德算法. 算法思路:用 ...

  10. C# 延时小函数 很好用

    平时我们在做winform开发的时候,有时候需要让程序休眠几秒钟,但是,如果我们直接使用 thread.sleep()函数,页面ui就会停止响应.怎么样解决呢,你可以把页面涉及到表现ui的代码放到一个 ...