【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. [JS] selector 背景选择器

    用于listview和button改变android原来控件的背景 android的selector是在drawable/xxx.xml中配置的 1.定义xml 把下面的XML文件保存成你自己命名的. ...

  2. Hbase rowkey设计一

    转自 http://blog.csdn.net/lifuxiangcaohui/article/details/40621067 hbase所谓的三维有序存储的三维是指:rowkey(行主键),col ...

  3. Apache HttpComponents 学习

    基本上,用户常用的就是HttpClient:它基于Http Core部分,但 Core部分太过于 low level,不建议使用,除非有特殊需要. Apache HttpComponentsTM 项目 ...

  4. C++函数类型

    继续上一篇 #include <iostream> using namespace std; void swap1(int &v1, int &v2); typedef v ...

  5. java---final、finally、finalize的区别

    Java finalize方法使用 标签: javaappletobjectwizardjvm工作 2011-08-21 11:37 48403人阅读 评论(5) 收藏 举报  分类: Java(96 ...

  6. UVA 1371 - Period(DP)

    题目链接:option=com_onlinejudge&Itemid=8&page=show_problem&category=&problem=4117&mo ...

  7. 【Java面试题】25 同步和异步有何异同,在什么情况下分别使用他们?举例说明。

    如果数据将在线程间共享.例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取. 当应用程序在对象上调用了一个需要花费很长时间 ...

  8. sublime text 删除插件

    1.ctrl+shift+p 输入remove package 选择要删掉的插件即可 2.去掉产生临死文件的插件:phptools

  9. Spring+Swagger文档无法排序问题解决

    项目中用到swagger用于自动生成文档,遇到了好多结合后的问题.而对于这个排序问题,在查看了后端Swagger原代码之后,发现视乎当前使用的swagger(不是springfox,应该不是官方的,网 ...

  10. UIView的背景渐变

    //绘制背景渐变 /* CGCradientCreateWithColorComponents函数需要四个参数: 色彩空间:(Color Space)这是一个色彩范围的容器,类型必须是CGColorS ...