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

题解:
首先知道一个性质,每一行每一列都最多有两个炮
那么很显然是DP
设F[i][j][k]表示前i行,有j列有一个炮,有k列有两个炮,那么转移式子为
这一行什么都不做:f[i][j][k]=f[i-1][j][k]
这一行填一个炮在列为0:f[i][j][k]=f[i-1][j-1][k]*c(m-j-k+1,1)
这一行填一个炮在列为1:f[i][j][k]=f[i-1][j+1][k-1]*c(j+1,1)
这一行填两个炮在列为0:f[i][j][k]=f[i-1][j-2][k]*c(m-j-k+2,2)
这一行填一个炮在列为0一个炮在列为1:f[i][j][k]=f[i-1][j][k-1]*c(j,1)*c(m-j-k+1,1)
这一行填两个炮在列为1:f[i][j][k]=f[i-1][j+2][k-2]*c(j+2,2)
代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#define mod 9999973
#define ll long long
using namespace std;
int n,m,ans;
int f[][][],c[][];
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=;i++)c[i][]=;
for(int i=;i<=;i++)
for(int j=;j<=i;j++)c[i][j]=(c[i-][j-]+c[i-][j])%mod;
f[][][]=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
for(int k=;j+k<=m;k++)
{
f[i][j][k]=f[i-][j][k];
if(j>=)f[i][j][k]=(f[i][j][k]+(ll)f[i-][j-][k]*c[m-j-k+][]%mod)%mod;
if(k>= && j+<=m)f[i][j][k]=(f[i][j][k]+(ll)f[i-][j+][k-]*c[j+][]%mod)%mod;
if(j>=)f[i][j][k]=(f[i][j][k]+(ll)f[i-][j-][k]*c[m-j-k+][]%mod)%mod;
if(j>= && k>=)f[i][j][k]=(f[i][j][k]+(ll)f[i-][j][k-]*c[j][]%mod*c[m-j-k+][]%mod)%mod;
if(k>= && j+<=m)f[i][j][k]=(f[i][j][k]+(ll)f[i-][j+][k-]*c[j+][])%mod;
}
for(int i=;i<=m;i++)
for(int j=;j<=m;j++)ans=(ans+f[n][i][j])%mod;
return !printf("%d\n",ans);
}
【BZOJ1801】【DTOJ2004】 [Ahoi2009]chess 中国象棋 【DP】的更多相关文章
- 【BZOJ1801】[Ahoi2009]chess 中国象棋 DP
[BZOJ1801][Ahoi2009]chess 中国象棋 Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮 ...
- BZOJ 1801: [Ahoi2009]chess 中国象棋( dp )
dp(i, j, k)表示考虑了前i行, 放了0个炮的有j列, 放了1个炮的有k列. 时间复杂度O(NM^2) -------------------------------------------- ...
- bzoj1801: [Ahoi2009]chess 中国象棋 dp
题意:在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮的行走方式大家应该很清楚吧. 题解:dp[i][j][k]表示到了第i行,有j列 ...
- BZOJ 1801: [Ahoi2009]chess 中国象棋 [DP 组合计数]
http://www.lydsy.com/JudgeOnline/problem.php?id=1801 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放 ...
- BZOJ1801 Ahoi2009 chess 中国象棋 【DP+组合计数】*
BZOJ1801 Ahoi2009 chess 中国象棋 Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮的行 ...
- bzoj1801: [Ahoi2009]chess 中国象棋(DP)
1801: [Ahoi2009]chess 中国象棋 题目:传送门 题解: 表示自己的DP菜的抠脚 %题解... 定义f[i][j][k]表示前i行 仅有一个棋子的有j列 有两个棋子的有k个 的方案数 ...
- BZOJ1801 [Ahoi2009]chess 中国象棋(DP, 计数)
题目链接 [Ahoi2009]chess 中国象棋 设$f[i][j][k]$为前i行,$j$列放了1个棋子,$k$列放了2个棋子的方案数 分6种情况讨论,依次状态转移. #include <b ...
- BZOJ_1801_[Ahoi2009]chess 中国象棋_DP
BZOJ_1801_[Ahoi2009]chess 中国象棋_DP Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像 ...
- Bzoj 1081 [Ahoi2009] chess 中国象棋
bzoj 1081 [Ahoi2009] chess 中国象棋 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1801 状态比较难设,的确 ...
- [luogu2051][bzoj1801][AHOI2009]chess中国象棋【动态规划】
题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法.大家肯定很清楚,在中国象棋中炮的行走方式是 ...
随机推荐
- 前后端分离及React的一些研究
前言 在对英才网企业线前端不断的完善过程中,我们尝试进行了前后端分离,引入Node环境.以及在使用React的过程中,自行开发DOM渲染框架,解决React兼容低版本IE的问题,在这个过程中,我们有了 ...
- git如何撤销工作区的修改
对工作区中文件的修改分为三种情况: (1)还没有git add (2)已经git add (3)已经git add,并再次进行修改 对于第一种情况,直接使用git checkout -- 文件,即可撤 ...
- Unity3D架构之PureMVC
之前了解过UI实现框架大多是用MVC架构的,才听说有这么一个基于MVC的跨平台开源框架叫PureMVC,前几天用到了做了一下,写一写分析总结官网位置:http://puremvc.org/ PureM ...
- Go-Mutex互斥量
先来看一段go1.12.5中Mutex的源码: // Copyright 2009 The Go Authors. All rights reserved. // Use of this source ...
- SPOJ NICEBTRE - Nice Binary Trees(树 先序遍历)
传送门 Description Binary trees can sometimes be very difficult to work with. Fortunately, there is a c ...
- kvm扩容home目录
KVM虚拟磁盘扩容 1.磁盘扩容分为raw和qcow2两种扩容方式,命令相同,区别是后缀名 [root@daixuan ~]# qemu-img info /data/daixuan1.qcow2 / ...
- display:table的几个用法
DIV+CSS的布局已经让表格布局几乎很少用到,除非表格语义性很强的情况. display:table解决了一部分需要使用表格特性但又不需要表格语义的情况, 尤其是DIV+CSS很不方便解决的问题,比 ...
- 标签的增加、删除与复制,动态标签js不生效的解决
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- git账号失效问题解决
linux开发机上,使用某人账号,进行代码同步.该员工离职,导致该git账号不可用. 此时需要完成3步配置: 1.生成新的公私秘钥:在~/.ssh/config中把私钥文件路径 append到文件末尾 ...
- docker-compose启动报错:Creating network "soft_default" with the default driver ERROR: cannot create network e5b60fc347db868e471b61ea185fd24e3ea7e2730149d91ad70baf29732aaff0 (br-e5b60fc347db): conflicts wi
docker-compose启动容器时出现报错 Creating network "soft_default" with the default driver ERROR: can ...