题目

在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮。 请问有多少种放置方法,中国像棋中炮的行走方式大家应该很清楚吧.

输入格式

一行包含两个整数N,M,中间用空格分开.

输出格式

输出所有的方案数,由于值比较大,输出其mod 9999973

输入样例

1 3

输出样例

7

提示

除了在3个格子中都放满炮的的情况外,其它的都可以.

100%的数据中N,M不超过100

50%的数据中,N,M至少有一个数不超过8

30%的数据中,N,M均不超过6

题解

一道dp题

设\(f[i][j][k]\)表示前i行有j列放了一个炮,k列放了两个炮

每行最多放两个,分类讨论转移,是放在了没有炮的行还是有炮的,一个还是两个,全都放还是分别不同。

见代码

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long int
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define BUG(s,n) for (int i = 1; i <= (n); i++) cout<<s[i]<<' '; puts("");
using namespace std;
const int maxn = 105,maxm = 100005,INF = 1000000000,P = 9999973;
inline int read(){
int out = 0,flag = 1; char c = getchar();
while (c < 48 || c > 57) {if (c == '-') flag = -1; c = getchar();}
while (c >= 48 && c <= 57) {out = (out << 3) + (out << 1) + c - '0'; c = getchar();}
return out * flag;
}
int f[maxn][maxn][maxn],n,m;
int C(int x) {return x * (x - 1) >> 1;}
int main(){
n = read(); m = read();
f[0][0][0] = 1;
for (int i = 1; i <= n; i++)
for (int j = 0; j <= m; j++)
for (int k = 0; j + k <= m; k++){
f[i][j][k] = f[i - 1][j][k];
int& F = f[i][j][k];
if (j) F += (LL)(m - j - k + 1) * f[i - 1][j - 1][k] % P,F %= P;
if (j > 1) F += (LL)C(m - j - k + 2) * f[i - 1][j - 2][k] % P,F %= P;
if (k) F += (LL)(j + 1) * f[i - 1][j + 1][k - 1] % P,F %= P;
if (k > 1) F += (LL)C(j + 2) * f[i - 1][j + 2][k - 2] % P,F %= P;
if (k) F += (LL)j * (m - j - k + 1) % P * f[i - 1][j][k - 1] % P,F %= P;
}
int ans = 0;
for (int j = 0; j <= m; j++)
for (int k = 0; j + k <= m; k++)
ans = (ans + f[n][j][k]) % P;
printf("%d",ans);
return 0;
}

最新文章

  1. 从源码浅析MVC的MvcRouteHandler、MvcHandler和MvcHttpHandler
  2. 02SpringMvc_springmvc快速入门小案例(XML版本)
  3. [AngularJS] Introduction to ui-router
  4. iOS开发Block的使用
  5. OpenXML: Asp.net利用OpenXML 导出Excel.
  6. js中__proto__(内部原型)和prototype(构造器原型)的关系
  7. JavaSE复习日记 : 方法的调用和方法的重载
  8. 大数据(3):基于sogou.500w.utf8数据Hbase和Spark实践
  9. 学习spring中遇见的问题
  10. bzoj3811 玛里苟斯
  11. php发送http put/patch/delete请求Demo
  12. scala程序开发入门
  13. 第26月第28天 avplayer cache
  14. python修改hosts
  15. bootstarpTable load data
  16. 移动端reset
  17. jenkins 部署问题
  18. opencv学习之路(2)、读取视频,读取摄像头
  19. Java 基础面试题
  20. leetcode 题解 || Valid Parentheses 问题

热门文章

  1. Centos 编译安装bind错误
  2. profix使用过程中遇到的一些问题
  3. 【luogu P1637 三元上升子序列】 题解
  4. Bootstrap 历练实例-轮播(carousel)插件方法
  5. java实现微信扫一扫详解
  6. react组件间的传值方法
  7. 【JAVA】cxf使用springboot与xml配置的差别所导致的问题。
  8. 21.VUE学习之-操作data里的数组变异方法push&amp;unshit&amp;pop&amp;shift的实例应用讲解
  9. Java面向对象---方法的创建与重载
  10. net user