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

正解:$dp$。

设$f[i][j][k]$表示前$i$行,有$j$列没有填炮,有$k$列填了一个炮。

那么转移分为$6$种情况:

1.当前行不放炮;

2.当前行放一个炮在没有炮的列上;

3.当前行放一个炮在有一个炮的列上;

4.当前行放两个炮在两个没有炮的列上;

5.当前行放两个炮在一个没有炮且一个有一个炮的列上;

6.当前行放两个炮在两个有一个炮的列上。

然后用乘法原理随便转移一下就行了。

 #include <bits/stdc++.h>
#define il inline
#define RG register
#define ll long long
#define rhl (9999973) using namespace std; int f[][][],n,m,ans;
ll res; il int gi(){
RG int x=,q=; RG char ch=getchar();
while ((ch<'' || ch>'') && ch!='-') ch=getchar();
if (ch=='-') q=-,ch=getchar();
while (ch>='' && ch<='') x=x*+ch-,ch=getchar();
return q*x;
} int main(){
#ifndef ONLINE_JUDGE
freopen("chess.in","r",stdin);
freopen("chess.out","w",stdout);
#endif
n=gi(),m=gi(),f[][m][]=;
for (RG int i=;i<=n;++i)
for (RG int j=;j<=m;++j)
for (RG int k=;j+k<=m;++k){
res=f[i-][j][k];
if (j+<=m && k) res+=1LL*f[i-][j+][k-]*(j+);
if (j+k+<=m) res+=1LL*f[i-][j][k+]*(k+);
if (j+<=m && k>=) res+=1LL*f[i-][j+][k-]*(j+)*(j+)>>;
if (j+k+<=m) res+=1LL*f[i-][j+][k]*(j+)*k;
if (j+k+<=m) res+=1LL*f[i-][j][k+]*(k+)*(k+)>>;
f[i][j][k]=res%rhl;
}
for (RG int i=;i<=m;++i)
for (RG int j=;i+j<=m;++j){
ans+=f[n][i][j]; if (ans>=rhl) ans-=rhl;
}
printf("%d\n",ans); return ;
}

最新文章

  1. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(8)-MVC与EasyUI DataGrid 分页
  2. javadoc生成出现错误“编码 GBK 的不可映射字符”
  3. Python 实现隐藏文件夹、文件操作
  4. FancySelect – 更好用的 jQuery 下拉选择框插件
  5. xampp的Apache无法启动解决方法
  6. Which Clang Warning Is Generating This Message?
  7. cocos2dx 3.x(一张背景图利用定时器实现循环轮播)
  8. python 练习 7
  9. C# Lodop实现打印
  10. c++ string 转GUID及反转
  11. 手机相机ISO是什么
  12. mysql中explain优化分析
  13. 第三章SignalR在线聊天例子
  14. HTML 5最终确定,八年后,我们再谈谈如何改变世界
  15. hdu 4465 概率称号
  16. 浅谈Web前端浏览器兼容问题
  17. mysql进阶知识
  18. 父级元素position:absolute,子节点也是absolute
  19. python bisect 排序模块 二分查找与 bisect 模块
  20. 微信小程序之for循环

热门文章

  1. LeeCode(No2 - Add Two Numbers)
  2. 服务器运行两个或两个以上的tomcat
  3. Fiddler相关配置
  4. leetcode 437. 路径总和 III
  5. github 0 学习
  6. Mybatis学习笔记3 - 增删改查示例
  7. Broken Keyboard (a.k.a. Beiju Text) UVA - 11988 (链表)
  8. Unity 用JSON库序列化与反序列化类,字典
  9. 性能测试工具LoadRunner14-LR之Controller 简介
  10. 摄像机模型 (Camera Model)