状压个啥$qwq$


思路:大力$DP$

提交:2次(自信的开了$int$)

题解:(见注释)

  1. #include<cstdio>
  2. #include<iostream>
  3. using namespace std;
  4. #define ull unsigned long long
  5. #define ll long long
  6. #define R register ll
  7. #define pause (for(R i=1;i<=10000000000;++i))
  8. #define In freopen("NOIPAK++.in","r",stdin)
  9. #define Out freopen("out.out","w",stdout)
  10. namespace Fread {
  11. static char B[<<],*S=B,*D=B;
  12. #ifndef JACK
  13. #define getchar() (S==D&&(D=(S=B)+fread(B,1,1<<15,stdin),S==D)?EOF:*S++)
  14. #endif
  15. inline int g() {
  16. R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
  17. if(ch==EOF) return EOF; do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret*fix;
  18. } inline bool isempty(const char& ch) {return (ch<=||ch>=);}
  19. inline void gs(char* s) {
  20. register char ch; while(isempty(ch=getchar()));
  21. do *s++=ch; while(!isempty(ch=getchar()));
  22. }
  23. } using Fread::g; using Fread::gs;
  24. const int N=,M=;
  25. int n,m,ans;
  26. ll f[N][N][N];
  27. //f[i][j][k]:所处行编号i,含有一个棋子的列数j,含有两个棋子的列数k
  28. signed main() {
  29. n=g(),m=g(); f[][][]=;
  30. for(R i=;i<=n;++i) for(R j=;j<=m;++j) for(R k=;k<=m-j;++k){
  31. f[i][j][k]+=f[i-][j][k];
  32. //不填棋子
  33. if(j>=) f[i][j][k]+=f[i-][j-][k]*(m-k-j+);
  34. //选空列填一个棋子
  35. if(k>=) f[i][j][k]+=f[i-][j+][k-]*(j+);
  36. //选含有一个棋子的某列
  37. if(j>=) f[i][j][k]+=f[i-][j-][k]*(m-k-j+)*(m-k-j+)/;
  38. //选两个空列分别填一个棋子
  39. if(k>=) f[i][j][k]+=f[i-][j][k-]*(m-k-j+)*j;
  40. //选一个空列和含有一个棋子的某列分别填一个棋子
  41. if(k>=) f[i][j][k]+=f[i-][j+][k-]*(j+)*(j+)/;
  42. //选含有一个棋子的某两列分别填一个棋子
  43. f[i][j][k]%=M;
  44. } for(R j=;j<=m;++j) for(R k=;k<=m-j;++k) ans=(ans+f[n][j][k])%M;
  45. printf("%d\n",ans);
  46. }

2019.07.17

P2051 [AHOI2009]中国象棋 大力DP的更多相关文章

  1. P2051 [AHOI2009]中国象棋[线性DP]

    最近智商有点不在线.其实一直不在线. 题目 先是想用$f[i][j][k][0/1/2]$表示摆了i行时有j列空着,k列有了一个炮,且当下摆了0/1/2个的状态,转移方程写的出来但是极其繁琐.于是又设 ...

  2. Luogu P2051[AHOI2009]中国象棋【dp】By cellur925

    题目传送门 题目大意:给定一个$n*m$的棋盘,求放三个“炮”使它们不共行也不共列的方案数.($n,m$$<=100$) 这题主要是转移比较困难,因为情况比较多,所以需要冷静大胆细心地进行分情况 ...

  3. 洛谷 P2051 [AHOI2009]中国象棋 状态压缩思想DP

    P2051 [AHOI2009]中国象棋 题意: 给定一个n*m的空棋盘,问合法放置任意多个炮有多少种情况.合法放置的意思是棋子炮不会相互打到. 思路: 这道题我们可以发现因为炮是隔一个棋子可以打出去 ...

  4. Luogu P2051 [AHOI2009]中国象棋(dp)

    P2051 [AHOI2009]中国象棋 题面 题目描述 这次小可可想解决的难题和中国象棋有关,在一个 \(N\) 行 \(M\) 列的棋盘上,让你放若干个炮(可以是 \(0\) 个),使得没有一个炮 ...

  5. [Luogu P2051] [AHOI2009]中国象棋 (状压DP->网格DP)

    题面 传送门:https://www.luogu.org/problemnew/show/P2051 Solution 看到这题,我们不妨先看一下数据范围 30pt:n,m<=6 显然搜索,直接 ...

  6. 洛谷 P2051 [AHOI2009]中国象棋 解题报告

    P2051 [AHOI2009]中国象棋 题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法. ...

  7. [洛谷P2051] [AHOI2009]中国象棋

    洛谷题目链接:[AHOI2009]中国象棋 题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法 ...

  8. [P2051 [AHOI2009]中国象棋] DP

    https://www.luogu.org/problemnew/show/P2051 题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一 ...

  9. [AHOI2009]中国象棋 BZOJ1801 dp

    题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法.大家肯定很清楚,在中国象棋中炮的行走方式是 ...

随机推荐

  1. Java集合--Hash、Hash冲突

    一.Hash 散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构.也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这 ...

  2. Java写学生管理系统

    package Homework08;/*调试了一上午,收获:学会了昨天的debug的使用吸取教训:Student stus[]=new Student[2]; for (int i=0;i<s ...

  3. 安装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

  4. DIP常用资源整理

    Deep Learning(深度学习): ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习):一 ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习) ...

  5. 集合源码阅读——ArrayList

    ArrayList 关键点: >>扩容每次扩容1.5倍 >>modcount的作用 >>ArrayList的父类AbstractList的成员变量 >> ...

  6. JavaScript 的查询机制——LHS 与 RHS

    JavaScript 引擎在查找一个变量的时候,有两种查找机制:LHS 和 RHS. RHS 的查询是简单地查找到某个变量的值,而 LHS 则是试图找到变量的容器的本身. 一个简单的例子:当我们执行 ...

  7. vue项目,子页面刷新404问题

    翻车事故分析: 因需对项目整体优化,调整过程,采用了路由的history模式,本地项目运行,刷新子页面都是OK的. 部署到测试服务器,正常跳转都ok,但刷新子页面就会出现404,请求变成了get,没有 ...

  8. PHP中pdo的使用

    <?php /** *下面代码中information为表名 * */ //1.先要连数据库 $pdo=new PDO('mysql:host=localhost;dbname=数据库名','用 ...

  9. opencv读取图像python和c++版本的结果不同

    问题: 在读取同一张图像时,python读取的结果和c++读取的结果差异较大,测试图像中最大误差达到16. 原因: python的opencv采用的是4.1.1,c++采用的是3.1.0,在解析JPE ...

  10. php的三个常用判断函数

    <?phperror_reporting(E_ERROR);$a;$b = false;$c = '';$d = 0;$e = null;$f = array(); echo 'empty', ...