BZOJ 1801 [Ahoi2009]中国象棋(线性动规)(洛谷P2051)
题意:就是在n*m的格子中放“炮”(中国象棋中的棋子)问有多少种放法,使得没有任意的两个炮相互攻击
思路:我们很容易的得到一列或者一行中最多放下两个炮(我也只能得到这些了,满脑子状压,但数据范围有100),这篇博客些的很好(传送门),我们定义dp[i][j][k]代表前i行我们有j列式有2个棋子,有k列是一个棋子,那么我们空的列的个数为m-i-j,我们在每行填的时候最多填2个,这样保证了我们每行不会多于2个。然后就是分情况讨论了
代码:
#include <bits/stdc++.h> using namespace std; typedef long long LL; inline LL read() {LL x=0,f=1;char ch=getchar();while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f; }const LL MOD=9999973; LL dp[107][107][107];int main() {int n=read(),m=read();dp[0][0][0]=1;for(int i=1;i<=n;i++){for(int j=0;j<=m;j++){for(int k=0;k<=m-j;k++){LL res=0;res+=dp[i-1][j][k];if(j)res+=dp[i-1][j-1][k+1]*(k+1);if(k)res+=dp[i-1][j][k-1]*(m-j-k+1);if(j&&k)res+=dp[i-1][j-1][k]*k*(m-j-k+1);if(j>1)res+=dp[i-1][j-2][k+2]*(k+2)*(k+1)/2;if(k>1)res+=dp[i-1][j][k-2]*(m-j-k+2)*(m-j-k+1)/2;dp[i][j][k]=res%MOD;}}}LL ans=0;for(int i=0;i<=m;i++){for(int j=0;j<=m-i;j++){ans=(ans+dp[n][i][j])%MOD;}}printf("%lld\n",ans%MOD);return 0; }
转载于:https://www.cnblogs.com/lalalatianlalu/p/9791130.html
BZOJ 1801 [Ahoi2009]中国象棋(线性动规)(洛谷P2051)相关推荐
- BZOJ 1801 chess 中国象棋
题意: 在n * m 的棋盘上放"炮",使得任意两个炮都不会互相攻击,求方案数. 题解: 既然是求方案数,那么考虑数学方法和递推,这一道题的限制条件比较麻烦,数学方法不合适,考虑递 ...
- 洛谷 P2051 [AHOI2009]中国象棋 状态压缩思想DP
P2051 [AHOI2009]中国象棋 题意: 给定一个n*m的空棋盘,问合法放置任意多个炮有多少种情况.合法放置的意思是棋子炮不会相互打到. 思路: 这道题我们可以发现因为炮是隔一个棋子可以打出去 ...
- BZOJ 1801: [Ahoi2009]chess 中国象棋( dp )
dp(i, j, k)表示考虑了前i行, 放了0个炮的有j列, 放了1个炮的有k列. 时间复杂度O(NM^2) -------------------------------------------- ...
- bzoj 1801: [Ahoi2009]chess 中国象棋 bzoj 4806: 炮
1801: [Ahoi2009]chess 中国象棋 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1851 Solved: 1062 [Submi ...
- BTTCOJ 问题 E: 维和部队 线性动规
题目描述 在2019国庆大阅兵仪式上,蓝色贝雷帽,荒漠迷彩服,维和部队方队阔步走来.中国是联合国安理会常任理事国中派出维和人员最多的国家.在联合国7个维和任务区,2500多名中国军人守护在最危险的地方 ...
- AHOI2009 中国象棋
题目链接 题目描述 在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法. (在中国象棋中炮的行走方式是:一个炮攻击到另一个炮,当且仅当它们在同 ...
- LG_2051_[AHOI2009]中国象棋
题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法.大家肯定很清楚,在中国象棋中炮的行走方式是 ...
- bzoj 1801: [Ahoi2009]chess 中国象棋【dp】
注意到一行只能放012个炮,我们只需要知道列的状态,不用状压行 所以设f[i][j][k]表示前i行有j列有1个炮,有k列有2个炮的方案数 然后分情况讨论转移就行了 #include<cstdi ...
- 【洛谷 P2051】 [AHOI2009]中国象棋(DP)
题目链接 首先想到状压dp,但是\(n,m\)高达100,怎么压? 容易发现,每行每列最多两个象棋,否则就直接gg了. 一个巧妙的设置状态的方式是,只需要记录到当前行有多少列是放了1个炮和2个炮. 然 ...
最新文章
- Oracle不能在本地计算机启动,Windows 不能在本地计算机启动 OracleDBConsoleorcl的问题解决方法...
- mysql5.6.37驱动_MySql (mysql-5.6.37) 在Windows的安装及使用
- 使用LeNet对于旋转数字进行识别:合并数字集合
- Server Application Unavailable
- Mybatis中传参包There is no getter for property named XXX in class java.lang.String
- 高清、免版权美图资源大全
- ac算法 有什么用 Java_AC算法使用例子
- Datawhale组队-Pandas(下)文本数据(打卡)
- sysadmin默认密码_Sysadmin指南,开源电子邮件客户端,macOS应用程序,SELinux,Firefox扩展等...
- Data Pump -- Example
- 创新不是突然而至——它是慢慢成长的
- 网络中的延迟和抖动问题
- 计算机用户名显示TEMP,win10只要打开ie桌面出现temp文件夹如何解决
- 联想家悦微型计算机的包装箱,08年联想家悦所有型号,联想家悦小机箱型号-
- FlyThings OS:基于Linux实现现代化人机交互体验的新嵌入式操作系统
- 华东师范大学计算机模拟试题,华东师范大学计算机机试真题
- 赚钱App研究之格式转换类app
- Jenkins针对不同的项目视图对不同的用户进行权限分配
- Linux Shell相关记笔记
- jedis的操作和使用
热门文章
- 【C++自我精讲】基础系列二 const
- webform里的验证控件
- Newtonsoft.Json.dll 本地调用正常,服务器调用不正常
- java 数据类型转换的一场_Java基础 — 四类八种基本数据类型
- 二部图最大权匹配_12,百度竞价推广账户搭建,关键词匹配-网络运营文字版
- java servlet 参数乱码_JSPServlet处理参数中的中文乱码总结
- 位运算符Java与详解_java位运算符详解
- oracle实例包括用户进程吗,ORACLE实例和ORACLE数据库详解(三)
- php打印出来乱码_PHP输出中文乱码的解决方法(转载)
- mybatis可以用oracle,使用MyBatis调用oracle函数(基于注释)