1801: [Ahoi2009]chess 中国象棋
Time Limit: 10 Sec Memory Limit: 64 MB
Submit: 2520 Solved: 1524
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
Sample Output
HINT
除了在3个格子中都放满炮的的情况外,其它的都可以.
100%的数据中N,M不超过100
50%的数据中,N,M至少有一个数不超过8
30%的数据中,N,M均不超过6
Source
每行只存在3中情况,不放,放一个棋子,放两个棋子,标准3进制状压DP
设动规数组f[i][j][k],表示前i行中,有j列有一个棋子,有k列有两个棋子
那么第i行有6种放置情况
1、不放
2、一个棋子,放到没有棋子的列
3、一个棋子,放到有一个棋子的列
4、两个棋子,都放到没有棋子的列
5、两个棋子,一个放到没有棋子的列,另一个放到有一个棋子的列
6、两个棋子,两个分别放到有一个棋子的列
第一次f[i][j][k]忘记取模爆了。。。
- #include<iostream>
- #include<cstdio>
- using namespace std;
- #define LL long long
- const int mod=;
- LL n,m,ans;
- LL f[][][];
- LL C(LL x)
- {
- return x*(x-)/;
- }
- int main()
- {
- cin>>n>>m;
- f[][][]=;
- for(int i=;i<=n;i++)
- for(int j=;j<=m;j++)
- for(int k=;k<=m-j;k++)
- {
- f[i][j][k]=f[i-][j][k];
- if(j) f[i][j][k]+=f[i-][j-][k]*(m-j-k+);
- if(j+<=m&&k) f[i][j][k]+=f[i-][j+][k-]*(j+);
- if(j>=) f[i][j][k]+=f[i-][j-][k]*C(m-j-k+);
- if(j&&k) f[i][j][k]+=f[i-][j][k-]*(m-j-k+)*j;
- if(j+<=m&&k>=)f[i][j][k]+=f[i-][j+][k-]*C(j+);
- f[i][j][k]%=mod;
- }
- for(int j=;j<=m;j++)
- for(int k=;k<=m-j;k++)
- ans+=f[n][j][k];
- ans%=mod;
- cout<<ans;
- return ;
- }
1801: [Ahoi2009]chess 中国象棋的更多相关文章
- BZOJ 1801: [Ahoi2009]chess 中国象棋( dp )
dp(i, j, k)表示考虑了前i行, 放了0个炮的有j列, 放了1个炮的有k列. 时间复杂度O(NM^2) -------------------------------------------- ...
- bzoj 1801: [Ahoi2009]chess 中国象棋
Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮的行走方式大家应该很清楚吧. Input 一行包含两个整数N, ...
- BZOJ——T 1801: [Ahoi2009]chess 中国象棋
http://www.lydsy.com/JudgeOnline/problem.php?id=1801 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: ...
- [BZOJ 1801] [Ahoi2009]chess 中国象棋 【DP】
题目链接:BZOJ - 1801 题目分析 对于50%的数据是可以直接状压 DP 的. 对于100%的数据,使用递推的 DP .(或者这只叫递推不叫 DP ?) 可以发现,每一行和每一列的棋子个数不能 ...
- BZOJ 1801: [Ahoi2009]chess 中国象棋 [DP 组合计数]
http://www.lydsy.com/JudgeOnline/problem.php?id=1801 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放 ...
- 【BZOJ】1801 [Ahoi2009]chess 中国象棋(dp)
题目 传送门:QWQ 分析 发现我们关心的不是棋子的位置,我们只关心棋子数量就ok. 首先每行每列最多两个棋子.这是显然的. 然后我觉得本题最难的部分就是对行进行讨论,蒟蒻我一直被限制在了对格点讨论. ...
- bzoj 1801: [Ahoi2009]chess 中国象棋【dp】
注意到一行只能放012个炮,我们只需要知道列的状态,不用状压行 所以设f[i][j][k]表示前i行有j列有1个炮,有k列有2个炮的方案数 然后分情况讨论转移就行了 #include<cstdi ...
- bzoj1801: [Ahoi2009]chess 中国象棋(DP)
1801: [Ahoi2009]chess 中国象棋 题目:传送门 题解: 表示自己的DP菜的抠脚 %题解... 定义f[i][j][k]表示前i行 仅有一个棋子的有j列 有两个棋子的有k个 的方案数 ...
- Bzoj 1081 [Ahoi2009] chess 中国象棋
bzoj 1081 [Ahoi2009] chess 中国象棋 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1801 状态比较难设,的确 ...
随机推荐
- Sphinx Building Docs in horizon
Building Contributor Documentation This documentation is written by contributors, for contributors. ...
- (转)总结Linux的chattr与lsattr命令详解
PS:有时候你发现用root权限都不能修改某个文件,大部分原因是曾经用chattr命令锁定该文件了.chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,不过现在生产绝大部分跑的li ...
- Ubuntu16.04搭建深度学习框架——TensorFlow
TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库,说白了,就是一个库. 小编自己在Ubuntu搭建了深度学习框架TensorFlow,感觉挺简单,现 ...
- LeetCode 222.完全二叉树的节点个数(C++)
给出一个完全二叉树,求出该树的节点个数. 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置.若最底 ...
- 用 JS 做一个数独游戏(一)
用 JS 做一个数独游戏(一) 数独的棋盘由 9x9 的方格组成,每一行的数字包含 1 ~ 9 九个数字,并且每一列包含 1 ~ 9 这 9 个不重复的数字,另外,整个棋盘分为 9 个 3x3 的块, ...
- 基于JQUERY 的图片查看插件
viewer是一款功能强大的图片查看器.它可以实现ACDsee等看图软件的部分功能.它可以对图片进行移动,缩放,旋转,翻转,可以前后浏览一组图片.该图片查看器还支持移动设备,支持键盘控制,功能十分强大 ...
- grunt项目构建
最近想把项目里添加grunt,说白了就是前端自动化管理,具体配置如下: 用到以下几个部件: grunt-contrib-cssmin grunt-contrib-uglify grunt-contri ...
- FormCollection的用法
FormCollection的用法: 有时候前台抛来的字段太多,在后台一个一个例举出来显得麻烦,而且还容易出错,FormCollection解决了这个烦恼 #region 给商家留言 [HttpPos ...
- C#开发usb通知之bulk传输
usb通信分为4种传输方式,下位机通信协议用的是块传输,也就是bulk传输,C#下实现的usb通信使用的是开源的LibUsbDotNet,主要的就是需要在C#中添加LibUsbDotNet.dll引用 ...
- SublimeText插件eslint : 语法检测
参考: http://www.tuicool.com/articles/faANRvj 安装之后的效果: 误用了 = ,在文件保存时就会被提示,直接顺手改掉就行了,方便的不行 步骤1:Sublime集 ...