题目描述

众所周知,双炮叠叠将是中国象棋中很厉害的一招必杀技。炮吃子时必须隔一个棋子跳吃,即俗称"炮打隔子"。 
炮跟炮显然不能在一起打起来,于是rly一天借来了许多许多的炮在棋盘上摆了起来……他想知道,在N×M的矩形
方格中摆若干炮(可以不摆)使其互不吃到的情况下方案数有几种。
棋子都是相同的。

输入输出格式

输入格式:

一行,两个正整数N和M。
N<=100,M<=100

输出格式:

一行,输出方案数mod 999983。

输入输出样例

输入样例#1:

1 3
输出样例#1:

7

分析 : 

显然一行一列只能放2个或以下棋子, 否则会相互攻击;
明显的DP;
定义f[i][j][k] , 表示前i行, 有j列是放了1个, k列放了两个; 转移方程 : f[i][j][k] += f[i-1][j][k] 什么都没放;
f[i][j][k] += f[i-1][j-1][k] * (m - (j - 1) - k) 在没放棋子的一列放了一个;
f[i][j][k] += f[i-1][j+1][k-1] * (j + 1) 在有一个棋子的一列放了一个, 变成了两个;
f[i][j][k] += f[i-1][j-2][k] * C(m - (j - 2) - k, 2) 在没放棋子的两列分别放两个棋子;
f[i][j][k] += f[i-1][j][k-1] * j * (m - (j - 1) - k) 直接在没放棋子的一列放上两个棋子;
f[i][j][k] += f[i-1][j+2][k-2] * C(j + 2, 2) 在放了一个棋子的两列风别放上一个; 记得取模; 代码奉上
// By zZhBr
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int p = ;
#define int long long int n, m; int f[][][]; int ans; signed main()
{
cin >> n >> m; f[][][] = ; for(register int i = ; i <= n ; i ++)
{
for(register int j = ; j <= m ; j ++)
{
for(register int k = ; k <= m - j ; k ++)
{ f[i][j][k] = (f[i][j][k] + f[i-][j][k]) % p; if(j - >= )
f[i][j][k] = (f[i][j][k] + f[i-][j-][k] * (m - (j - ) - k)) % p; if(k - >= )
f[i][j][k] = (f[i][j][k] + f[i-][j+][k-] * (j + ))% p; if(j - >= )
{
int t = m - (j - ) - k;
f[i][j][k] = (f[i][j][k] + f[i-][j-][k] * (t * (t - )) / ) % p;
} if(k - >= )
f[i][j][k] = (f[i][j][k] + f[i-][j+][k-] * (j + ) * (j + ) / ) % p; if(k - >= )
f[i][j][k] = (f[i][j][k] + f[i-][j][k-] * j * (m - (j - ) - k)) % p; if(i == n) ans = (ans + f[i][j][k]) % p; //printf("n == %lld, f[i][j][k] == %lld\n", i, f[i][j][k]);
}
}
} cout << ans << endl; return ;
}

zZhBr


提交地址 https://www.lydsy.com/JudgeOnline/problem.php?id=4806 ;

Bzoj 4806 炮 (dp)的更多相关文章

  1. bzoj 4806: 炮【dp】

    同1801 注意到一行只能放012个炮,我们只需要知道列的状态,不用状压行 所以设f[i][j][k]表示前i行有j列有1个炮,有k列有2个炮的方案数 然后分情况讨论转移就行了 #include< ...

  2. bzoj 4806 炮

    Written with StackEdit. Description 众所周知,双炮叠叠将是中国象棋中很厉害的一招必杀技.炮吃子时必须隔一个棋子跳吃,即俗称"炮打隔子". 炮跟炮 ...

  3. BZOJ 4806 - 4809 象棋四题

    4806: 炮 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 103  Solved: 72[Submit][Status][Discuss] Des ...

  4. BZOJ.2655.calc(DP/容斥 拉格朗日插值)

    BZOJ 洛谷 待补.刚刚政治会考完来把它补上了2333.考数学去了. DP: 首先把无序化成有序,选严格递增的数,最后乘个\(n!\). 然后容易想到令\(f_{i,j}\)表示到第\(i\)个数, ...

  5. bzoj4806 炮——DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4806 看到这题首先会想到状压什么乱七八糟的,然而很难做: 其实,因为求的是方案数,所以并不需 ...

  6. BZOJ 3270 && BZOJ 1778 (期望DP && 高斯消元)

    BZOJ 3270 :设置状态为Id(x,y)表示一人在x,一人在y这个状态的概率. 所以总共有n^2种状态. p[i]表示留在该点的概率,Out[i]=(1-p[i])/Degree[i]表示离开该 ...

  7. BZOJ 1040 树形DP+环套树

    就是有n个点n条边,那么有且只有一个环那么用Dfs把在环上的两个点找到.然后拆开,从这条个点分别作树形Dp即可. #include <cstdio> #include <cstrin ...

  8. bzoj 3851: 2048 dp优化

    3851: 2048 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 22  Solved: 9[Submit][Status] Description T ...

  9. BZOJ 1068 (区间DP)

    题意:字符串的压缩,f[l][r][0]代表还没M,f[l][r][1]代表有M. #include<cstdio> #include<cmath> #include<c ...

随机推荐

  1. IDEA微服务项目的application.yml没有绿色叶子的解决办法

    1.今天在写微服务项目的时候成功入坑,那么问题是啥呢?接下来和我一起走入bug的世界吧,让我们看看究竟是怎么回事. *问题描述 1.application.yml是灰色的小格子 2.实在难看 *需要解 ...

  2. jvm对象内存分配

    一.jvm简单结构图 1.jvm内存对象分配整体流程: 1.类加载子系统和方法区 类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息存放于一块称为方法区的内存空间.除了类的信息外, ...

  3. Mac 安装python 3.*新版本的详细步骤

    Mac 系统自带python,不过自带的python版本都是2.*版本.虽然不影响老版本项目的运行, 但是python最新的3.*版本的一些语法与2.*版本并不相同,我们不论是学习还是使用,当然用最新 ...

  4. 自己制作一个简单的操作系统二[CherryOS]

    自己制作一个简单的操作系统二[CherryOS] 我的上一篇博客 自己制作一个简单的操作系统一[环境搭建], 详细介绍了制作所需的前期准备工作 一. 一点说明 这个操作系统只是第一步, 仅仅是开机显示 ...

  5. 轻松部署calico

    一.资源 官方文档 https://docs.projectcalico.org/v3.8/getting-started/kubernetes/installation/integration 二. ...

  6. Exceptionless 5.0.0 本地Docker快速部署介绍

    在之前我有专门写两篇文章介绍过Exceptionless这款开源日志项目的使用和部署,但是当时是基于4.1.0版本(2017年的release),时隔两年多Exceptionless也推出了5.0.0 ...

  7. html实现打印预览效果

    前面说到利用lodop插件进行打印设置,那个应用于打印快递面单,或者跟快递面单相似场景的情况. 今天的利用html快速打印出A4纸大小的场景,例如:合同.静态文本等. 效果如下: 方式一 1.设置di ...

  8. mybatis 配置之<typeAliases>别名配置元素设置

    一.方式一:使用typeAlias <typeAliases> <typeAlias alias="User" type="com.**.entity. ...

  9. Case1-basic network framework/Related organization‘s name

    常见的计算机网络物理拓扑结构: 1.星型网 2.树型网 3.分布式网络 4.总线型网 5.环型网 6.复合型网络 计算机网络相关的标准化组织: 国际标准化组织(ISO):International O ...

  10. vimrc配置文件

    目录 vimrc配置文件 参考 主要功能 使用方法 配置文件 文件下载 vimrc配置文件