P2051 [AHOI2009]中国象棋 大力DP
状压个啥$qwq$
思路:大力$DP$
提交:2次(自信的开了$int$)
题解:(见注释)
- #include<cstdio>
- #include<iostream>
- using namespace std;
- #define ull unsigned long long
- #define ll long long
- #define R register ll
- #define pause (for(R i=1;i<=10000000000;++i))
- #define In freopen("NOIPAK++.in","r",stdin)
- #define Out freopen("out.out","w",stdout)
- namespace Fread {
- static char B[<<],*S=B,*D=B;
- #ifndef JACK
- #define getchar() (S==D&&(D=(S=B)+fread(B,1,1<<15,stdin),S==D)?EOF:*S++)
- #endif
- inline int g() {
- R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
- if(ch==EOF) return EOF; do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret*fix;
- } inline bool isempty(const char& ch) {return (ch<=||ch>=);}
- inline void gs(char* s) {
- register char ch; while(isempty(ch=getchar()));
- do *s++=ch; while(!isempty(ch=getchar()));
- }
- } using Fread::g; using Fread::gs;
- const int N=,M=;
- int n,m,ans;
- ll f[N][N][N];
- //f[i][j][k]:所处行编号i,含有一个棋子的列数j,含有两个棋子的列数k
- signed main() {
- n=g(),m=g(); f[][][]=;
- for(R i=;i<=n;++i) for(R j=;j<=m;++j) for(R k=;k<=m-j;++k){
- f[i][j][k]+=f[i-][j][k];
- //不填棋子
- if(j>=) f[i][j][k]+=f[i-][j-][k]*(m-k-j+);
- //选空列填一个棋子
- if(k>=) f[i][j][k]+=f[i-][j+][k-]*(j+);
- //选含有一个棋子的某列
- if(j>=) f[i][j][k]+=f[i-][j-][k]*(m-k-j+)*(m-k-j+)/;
- //选两个空列分别填一个棋子
- if(k>=) f[i][j][k]+=f[i-][j][k-]*(m-k-j+)*j;
- //选一个空列和含有一个棋子的某列分别填一个棋子
- if(k>=) f[i][j][k]+=f[i-][j+][k-]*(j+)*(j+)/;
- //选含有一个棋子的某两列分别填一个棋子
- f[i][j][k]%=M;
- } for(R j=;j<=m;++j) for(R k=;k<=m-j;++k) ans=(ans+f[n][j][k])%M;
- printf("%d\n",ans);
- }
2019.07.17
P2051 [AHOI2009]中国象棋 大力DP的更多相关文章
- P2051 [AHOI2009]中国象棋[线性DP]
最近智商有点不在线.其实一直不在线. 题目 先是想用$f[i][j][k][0/1/2]$表示摆了i行时有j列空着,k列有了一个炮,且当下摆了0/1/2个的状态,转移方程写的出来但是极其繁琐.于是又设 ...
- Luogu P2051[AHOI2009]中国象棋【dp】By cellur925
题目传送门 题目大意:给定一个$n*m$的棋盘,求放三个“炮”使它们不共行也不共列的方案数.($n,m$$<=100$) 这题主要是转移比较困难,因为情况比较多,所以需要冷静大胆细心地进行分情况 ...
- 洛谷 P2051 [AHOI2009]中国象棋 状态压缩思想DP
P2051 [AHOI2009]中国象棋 题意: 给定一个n*m的空棋盘,问合法放置任意多个炮有多少种情况.合法放置的意思是棋子炮不会相互打到. 思路: 这道题我们可以发现因为炮是隔一个棋子可以打出去 ...
- Luogu P2051 [AHOI2009]中国象棋(dp)
P2051 [AHOI2009]中国象棋 题面 题目描述 这次小可可想解决的难题和中国象棋有关,在一个 \(N\) 行 \(M\) 列的棋盘上,让你放若干个炮(可以是 \(0\) 个),使得没有一个炮 ...
- [Luogu P2051] [AHOI2009]中国象棋 (状压DP->网格DP)
题面 传送门:https://www.luogu.org/problemnew/show/P2051 Solution 看到这题,我们不妨先看一下数据范围 30pt:n,m<=6 显然搜索,直接 ...
- 洛谷 P2051 [AHOI2009]中国象棋 解题报告
P2051 [AHOI2009]中国象棋 题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法. ...
- [洛谷P2051] [AHOI2009]中国象棋
洛谷题目链接:[AHOI2009]中国象棋 题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法 ...
- [P2051 [AHOI2009]中国象棋] DP
https://www.luogu.org/problemnew/show/P2051 题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一 ...
- [AHOI2009]中国象棋 BZOJ1801 dp
题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法.大家肯定很清楚,在中国象棋中炮的行走方式是 ...
随机推荐
- Java集合--Hash、Hash冲突
一.Hash 散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构.也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这 ...
- Java写学生管理系统
package Homework08;/*调试了一上午,收获:学会了昨天的debug的使用吸取教训:Student stus[]=new Student[2]; for (int i=0;i<s ...
- 安装HAXM报错:failed to configure driver unknown error. failed to open driver 并提示数字签证不可用
1.安装微软补丁:https://www.microsoft.com/en-us/download/confirmation.aspx?id=46148 2.重启后重新安装HAXM
- DIP常用资源整理
Deep Learning(深度学习): ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习):一 ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习) ...
- 集合源码阅读——ArrayList
ArrayList 关键点: >>扩容每次扩容1.5倍 >>modcount的作用 >>ArrayList的父类AbstractList的成员变量 >> ...
- JavaScript 的查询机制——LHS 与 RHS
JavaScript 引擎在查找一个变量的时候,有两种查找机制:LHS 和 RHS. RHS 的查询是简单地查找到某个变量的值,而 LHS 则是试图找到变量的容器的本身. 一个简单的例子:当我们执行 ...
- vue项目,子页面刷新404问题
翻车事故分析: 因需对项目整体优化,调整过程,采用了路由的history模式,本地项目运行,刷新子页面都是OK的. 部署到测试服务器,正常跳转都ok,但刷新子页面就会出现404,请求变成了get,没有 ...
- PHP中pdo的使用
<?php /** *下面代码中information为表名 * */ //1.先要连数据库 $pdo=new PDO('mysql:host=localhost;dbname=数据库名','用 ...
- opencv读取图像python和c++版本的结果不同
问题: 在读取同一张图像时,python读取的结果和c++读取的结果差异较大,测试图像中最大误差达到16. 原因: python的opencv采用的是4.1.1,c++采用的是3.1.0,在解析JPE ...
- php的三个常用判断函数
<?phperror_reporting(E_ERROR);$a;$b = false;$c = '';$d = 0;$e = null;$f = array(); echo 'empty', ...