AHOI中国象棋(dp)
大力dp题。
每行每列最多放两个,考虑用行作为dp阶段。
dp[i][j][k]表示i行,有一个的有j列,有两个的有k列。
然后就是分类讨论。
一个都不放,放一个在0出,放一个在1出,放两个在0,放两个在1,放两个在01,大力转移。
Code
#include<iostream>
using namespace std;
long long n,m,dp[][][],ans,mod;
inline int c(int n){return (n*(n-))>>;}
int main()
{
cin>>n>>m;
mod=;
dp[][][]=;
for(int i=;i<=n;++i)
for(int j=;j<=m;++j)
for(int k=;k+j<=m;++k)
{
dp[i][j][k]+=dp[i-][j][k];
dp[i][j][k]%=mod;
if(m-k-j+>&&j->=)dp[i][j][k]+=dp[i-][j-][k]*(m-k-j+);
dp[i][j][k]%=mod;
if(j+<=m&&k->=)dp[i][j][k]+=dp[i-][j+][k-]*(j+);
dp[i][j][k]%=mod;
if(j->=&&m-k-j+>)dp[i][j][k]+=dp[i-][j-][k]*c(m-k-j+);
dp[i][j][k]%=mod;
if(j+<=m&&k->=)dp[i][j][k]+=dp[i-][j+][k-]*c(j+);
dp[i][j][k]%=mod;
if(k->=&&j>)dp[i][j][k]+=dp[i-][j][k-]*(m-j-k+)*j;
dp[i][j][k]%=mod;
}
for(int i=;i<=m;++i)
for(int j=;j+i<=m;++j)
ans+=dp[n][i][j],ans%=mod;
cout<<ans;
return ;
}
AHOI中国象棋(dp)的更多相关文章
- BZOJ 1801: [Ahoi2009]chess 中国象棋( dp )
dp(i, j, k)表示考虑了前i行, 放了0个炮的有j列, 放了1个炮的有k列. 时间复杂度O(NM^2) -------------------------------------------- ...
- [P2051 [AHOI2009]中国象棋] DP
https://www.luogu.org/problemnew/show/P2051 题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一 ...
- Luogu P2051 [AHOI2009]中国象棋(dp)
P2051 [AHOI2009]中国象棋 题面 题目描述 这次小可可想解决的难题和中国象棋有关,在一个 \(N\) 行 \(M\) 列的棋盘上,让你放若干个炮(可以是 \(0\) 个),使得没有一个炮 ...
- BZOJ 1801中国象棋 DP
1801: [Ahoi2009]chess 中国象棋 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1426 Solved: 826[Submit][ ...
- 【BZOJ1801】[Ahoi2009]chess 中国象棋 DP
[BZOJ1801][Ahoi2009]chess 中国象棋 Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮 ...
- JZOJ 1667 ( bzoj 1801 ) [ AHOI 2009 ] 中国象棋 —— DP
题目:https://jzoj.net/senior/#main/show/1667 首先,一行.一列最多只有 2 个炮: 所以记录一下之前有多少行有 0/1/2 个炮,转移即可: 注意取模!小心在某 ...
- bzoj1801: [Ahoi2009]chess 中国象棋 dp
题意:在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮的行走方式大家应该很清楚吧. 题解:dp[i][j][k]表示到了第i行,有j列 ...
- P2051 [AHOI2009]中国象棋——DP(我是谁,我在哪,为什么)
象棋,给你棋盘大小,然后放炮(炮的数量不限),不能让炮打到其他的炮,问方案数: 数据n,m<=200; 状态压缩似乎能做,但是我不会: 因为只要状态数,所以不必纠结每种状态的具体情况: 可以想出 ...
- BZOJ 1801: [Ahoi2009]chess 中国象棋 [DP 组合计数]
http://www.lydsy.com/JudgeOnline/problem.php?id=1801 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放 ...
随机推荐
- windows中dir命令
最近想用dos命令打印指定目录下的所有文件夹的完整路径.最终发现可用dir命令来实现.在此学习下dir的各项命令. 32位win7系统上,打印帮助文档. D:\test>dir /? 显示目录中 ...
- 使用ThreadLocal管理Mybatis中SqlSession对象
转自http://blog.csdn.net/qq_29227939/article/details/52029065 public class MybatisUtil { private stati ...
- [转帖]Docker的数据管理(volume/bind mount/tmpfs)
Docker(十五)-Docker的数据管理(volume/bind mount/tmpfs) https://www.cnblogs.com/zhuochong/p/10069719.html do ...
- 994.Contiguous Array 邻近数组
描述 Given a binary array, find the maximum length of a contiguous subarray with equal number of 0 and ...
- js判断数组是否包含某个字符串变量的实例
最近碰到一个这样的现象,后台返回的数据中,数组里面有一些有变量值,有一些没有变量值. 举个例子,比如后台返回的例子是这样的: var arr=[ { "status":" ...
- 剑指offer(17)层次遍历树
题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. public class Solution { ArrayList<Integer> list = new ArrayLis ...
- sublime text3安装代码格式化的步骤
1.首先查看有没有安装package control插件,若没有,进行此链接操作——http://blog.csdn.net/kongguyoulan523/article/details/51144 ...
- 一个好玩的小制作,以及在<a/>中的标签href="javascript:;"/href="javascript:void(0);"/href="javascript:"的用法
一:一个小图标的制作 我们在支付宝.微信等某些地方上传文件时会遇到以下的图标,但是这样的图标其实可以用<a/>标签以及css样式完成, 具体代码如下: <!DOCTYPE html& ...
- DeepLearning训练方法
1.BN层训练技巧 缩小输入尺寸,这样可以提高batchsize的大小,在BN层适应了该数据集后,固定住BN层参数,放大输入尺寸继续训练 2.语义分割中解决网络输出尺寸与原尺寸的gap方法(如 1/8 ...
- 牛客网-2018年全国多校算法寒假训练营练习比赛(第四场)-A
解题思路:二分图的最大匹配,但这题是所有点都遍历一遍,所以答案/2: 代码: #include<iostream> #include<algorithm> #include&l ...