博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1801: [Ahoi2009]chess 中国象棋( dp )
阅读量:5213 次
发布时间:2019-06-14

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

dp(i, j, k)表示考虑了前i行, 放了0个炮的有j列, 放了1个炮的有k列. 时间复杂度O(NM^2)

--------------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<algorithm>
 
using namespace std;
 
typedef long long ll;
 
const int maxn = 109;
const int MOD = 9999973;
const int INV = 4999987;
 
int n, m;
int dp[maxn][maxn][maxn];
 
inline void upd(int &x, int t) {
if((x += t) >= MOD)
x -= MOD;
}
 
int main() {
scanf("%d%d", &n, &m);
memset(dp, 0, sizeof dp);
dp[0][m][0] = 1;
for(int i = 1; i <= n; i++)
for(int j = 0; j <= m; j++)
for(int k = 0; k <= m - j; k++) {
int &t = dp[i][j][k];
upd(t, dp[i - 1][j][k]);
if(k) upd(t, (j + 1) * dp[i - 1][j + 1][k - 1] % MOD);
upd(t, (k + 1) * dp[i - 1][j][k + 1] % MOD);
if(k >= 2) upd(t, ll(INV) * (j + 1) * (j + 2) * dp[i - 1][j + 2][k - 2] % MOD);
upd(t, ll(INV) * (k + 1) * (k + 2) * dp[i - 1][j][k + 2] % MOD);
upd(t, ll(k) * (j + 1) * dp[i - 1][j + 1][k] % MOD);
}
int ans = 0;
for(int i = 0; i <= m; i++)
for(int j = 0; j <= m - i; j++)
upd(ans, dp[n][i][j]);
printf("%d\n", ans);
return 0;
}

--------------------------------------------------------------------------

1801: [Ahoi2009]chess 中国象棋

Time Limit: 10 Sec  
Memory Limit: 64 MB
Submit: 1172  
Solved: 688
[ ][ ][ ]

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

Source

 

转载于:https://www.cnblogs.com/JSZX11556/p/5125709.html

你可能感兴趣的文章
UITabbarController的UITabbarItem(例:"我的")点击时,判断是否登录
查看>>
机器学习之支持向量机(一):支持向量机的公式推导
查看>>
对【SQL SERVER 分布式事务解决方案】的心得补充
查看>>
UNIX基础知识之输入和输出
查看>>
Diango路由映射FBV和CBV
查看>>
Android Studio配置指南总结
查看>>
【洛谷 P1666】 前缀单词 (Trie)
查看>>
python之装饰器
查看>>
对称加密和非对称加密
查看>>
SQL SELECT INTO
查看>>
数据库锁机制及乐观锁,悲观锁的并发控制
查看>>
实验四《Android程序设计》
查看>>
spring MVC mybatis dispacherServlet(源码解读)
查看>>
图像处理中双线性插值
查看>>
RobHess的SIFT代码解析之RANSAC
查看>>
bzoj3944:Sum
查看>>
asp.net(C#)利用QRCode生成二维码(续)-在二维码图片中心加Logo或图像 .
查看>>
编译器开发系列--Ocelot语言2.变量引用的消解
查看>>
信用卡业务知识
查看>>
UVA 10859 - Placing Lampposts 树形DP、取双优值
查看>>