炮(cannon)
【题目描述】
  众所周知,双炮叠叠将是中国象棋中很厉害的一招必杀技。炮吃子时必须隔一个棋子跳吃,即俗称“炮打隔子”。 炮跟炮显然不能在一起打起来,于是rly一天借来了许多许多的炮在棋盘上摆了起来……他想知道,在N×M的矩形方格中摆若干炮(可以不摆)使其互不吃到的情况下方案数有几种。
  棋子都是相同的。
【输入说明】
  一行,两个正整数N和M。
【输出说明】
  一行,输出方案数mod 999983。
【样例输入】
  1 3
【样例输出】
  7
【数据范围】
  对于40%的数据,N<=4,M<=4
  对于70%的数据,N<=100,M<=8
  对于100%的数据,N<=100,M<=100

【题目分析】

  DP。f[i][j][k]表示前i行放1个炮的有j列,放2个炮的有k(m-j)列。(每一行或者一列都是最多只能放两个炮)
  1.该行不放炮;
  2.该行在没有炮的1列中放置1个炮的方案数为 f[i-1][j-1][k]*(m-i-j+1);
  3.该行在有1个炮的1列中放置1个炮(那这列就变成2个炮)的方案数为 f[i-1][j+1][k-1]*(j+1);
  4.该行在没有炮的2列中各放置1个炮的方案数为 f[i-1][j-2][k]*C(m-j-k-2);
  5.该行在有1个炮和没有炮的2列中各放置1个炮的方案数为 f[i-1][j][k-1]*(m-j-k+1)*j;
  6.该行在有1个炮的2列中各放置1个炮的方案数为 f[i-1][j+2][k-2]*C(j+2,2);

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
const int mo=;
int m,n;
int ans=;
long long f[][][];
int C(int t)
{
return ((t*(t-))>>)%mo;
}
int main()
{
freopen("cannon.in","r",stdin);
freopen("cannon.out","w",stdout);
scanf("%d%d",&n,&m);
f[][][]=;
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
for (int k=;k<=m-j;k++)
{
f[i][j][k]=f[i-][j][k];
if (j) f[i][j][k]=(f[i][j][k]+f[i-][j-][k]*(m-j-k+)%mo)%mo;
if (k&&j<m) f[i][j][k]=(f[i][j][k]+f[i-][j+][k-]*(j+)%mo)%mo;
if (j>) f[i][j][k]=(f[i][j][k]+f[i-][j-][k]*C(m-j-k+)%mo)%mo;
if (j&&k) f[i][j][k]=(f[i][j][k]+f[i-][j][k-]*(m-j-k+)%mo*j%mo)%mo;
if (k>&&j<m-) f[i][j][k]=(f[i][j][k]+f[i-][j+][k-]*C(j+)%mo)%mo;
}
for (int i=;i<=m;i++)
for (int j=;j<=m-i;j++)
ans=(ans+f[n][i][j])%mo;
printf("%d",ans);
fclose(stdin);fclose(stdout);
return ;
}

炮(cannon)的更多相关文章

  1. 【贪心】小Y的炮[cannon]题解

    模拟赛的题目,做的时候由于第二题表打太久了,只剩下40分钟,想都没想就写了一个爆搜20分... 这道题单调性很关键,下面会解释 P.S.解释在代码里 #include<cstdio> #i ...

  2. 模拟赛1102d1

    炮(cannon)[题目描述]众所周知,双炮叠叠将是中国象棋中很厉害的一招必杀技.炮吃子时必须隔一个棋子跳吃,即俗称"炮打隔子". 炮跟炮显然不能在一起打起来,于是rly一天借来了 ...

  3. 11.2 morning

    noip模拟题day1——棋盘上的问题 day1模拟题 By FancyCoder总览(Overview)注意事项:共3道题目,时间2.5小时.Pascal选手允许使用math库和ansistring ...

  4. 济南学习 Day 5 T1 am

    炮(cannon)[题目描述]众所周知,双炮叠叠将是中国象棋中很厉害的一招必杀技.炮吃子时必须隔一个棋子跳吃,即俗称“炮打隔子”. 炮跟炮显然不能在一起打起来,于是rly一天借来了许多许多的炮在棋盘上 ...

  5. ImageNet2017文件下载

    ImageNet2017文件下载 文件说明 imagenet_object_localization.tar.gz包含训练集和验证集的图像数据和地面实况,以及测试集的图像数据. 图像注释以PASCAL ...

  6. ImageNet2017文件介绍及使用

    ImageNet2017文件介绍及使用 文件说明 imagenet_object_localization.tar.gz包含训练集和验证集的图像数据和地面实况,以及测试集的图像数据. 图像注释以PAS ...

  7. hdu 4499 Cannon dfs

    Cannon Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4499 D ...

  8. hdu 4499 Cannon(暴力)

    题目链接:hdu 4499 Cannon 题目大意:给出一个n*m的棋盘,上面已经存在了k个棋子,给出棋子的位置,然后求能够在这种棋盘上放多少个炮,要求后放置上去的炮相互之间不能攻击. 解题思路:枚举 ...

  9. hdu4499 Cannon (DFS+回溯)

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=4499 Cannon ...

随机推荐

  1. linux第1天 fork exec 守护进程

    概念方面 文件是对I/O设备的抽象表示.虚拟存储器是对主存和磁盘I/O设备的抽象表示.进程则是对处理器.主存和I/O设备的抽象表示 中断 早期是没有进程这个概念,当出现中断技术以后才出现进程这个概念 ...

  2. HDU 2993 MAX Average Problem(斜率优化)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2993 Problem Description Consider a simple sequence w ...

  3. 继承 Bean 配置

    继承 Bean 配置 Spring 允许继承 bean 的配置, 被继承的 bean 称为父 bean. 继承这个父 Bean 的 Bean 称为子 Bean子 Bean 从父 Bean 中继承配置, ...

  4. 常见http状态

    200(成功):服务器已成功处理了请求.通常,这表示服务器提供了请求的网页.如果是对您的 robots.txt 文件显示此状态码,则表示 Googlebot 已成功检索到该文件. 304(未修改):自 ...

  5. 关于mybatis的参数2个使用经验(类似于struts2的通配所有页面的action配置,xmlsq语句参数类型为基本类型时的快捷指定办法)

    1.我们都知道在struts2中为防止浏览器绕过struts过滤器直接请求页面,所以我们都会配置一个拦截所有页面的action,如下: <action name="*"> ...

  6. 夺命雷公狗---微信开发59----在线点播电影网1之ckplayer播放器

    我们节课程就要开始写一个小项目了,这项目主要是写一个在线点播电影影网的,我们用到的播放器是ckplayer ckplayer基本介绍: ckplayer的全称是:超酷flv播放器,他是一款用于网页上播 ...

  7. [Ubuntu] Linux下使用google app engine,无法打开https网站的解决方法

    为什么这里写的是 google app engine?原因我就不解释了.步骤如下: 1)安装证书导入工具:$ sudo apt-get install libnss3-tools 2)导入CA.crt ...

  8. php防止表单重复提交

    解决方案一:引入cookie机制来解决 提交页面代码如下a.php代码如下: <form id="form1" name="form1" method=& ...

  9. IE和FF区别关于css和js

    css 1.ul标签FF中有padding值,没有margin,IE中相反 解决办法:将ul的padding和margin都设为0, js 1.IE中innerText在火狐中没有,使用textCon ...

  10. Sqlserver常用的时间函数---GETDATE、GETUTCDATE、DATENAME

    GETDATE 按 datetime 值的 Microsoft® SQL Server™ 标准内部格式返回当前系统日期和时间.语法GETDATE ( )返回类型datetime注释日期函数可用在 SE ...