博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ1801 [Ahoi2009]chess 中国象棋 【dp】
阅读量:5366 次
发布时间:2019-06-15

本文共 1781 字,大约阅读时间需要 5 分钟。

题目

在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
#include
#include
#include
#include
#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<
<<' '; 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;}

转载于:https://www.cnblogs.com/Mychael/p/8318632.html

你可能感兴趣的文章
函数递归与二分法
查看>>
struts2标签
查看>>
Git最佳实践
查看>>
strlen判断字符串长度要注意的事项
查看>>
javascript高级程序设计--第三章
查看>>
react之路:使用redux-immutable
查看>>
python---网络爬虫01
查看>>
Qt第一个小程序(使用vs2017开发)
查看>>
有用的工具平台收集(不断更新中)
查看>>
弄清java中的字节与字符
查看>>
mongo-查询(3)——关于null
查看>>
算法导论第六章堆排序(一)
查看>>
Android软件开发之发送短信与系统短信库解析
查看>>
Google 发布 Android 性能优化典范
查看>>
软件工程之基于快速原型与面向对象的统一过程的软件系统分析与设计方法
查看>>
Spring -09 -在Spring工程 中加载 properties 文件 -为某个属性添加注解赋初值
查看>>
[游戏模版8] Win32 透明贴图
查看>>
三十二、http与www服务介绍
查看>>
简单的四则运算器程序
查看>>
这里有一篇简单易懂的webSocket 快到碗里来~
查看>>