P2051 [AHOI2009]中国象棋——DP(我是谁,我在哪,为什么)
象棋,给你棋盘大小,然后放炮(炮的数量不限),不能让炮打到其他的炮,问方案数;
数据n,m<=200;
状态压缩似乎能做,但是我不会;
因为只要状态数,所以不必纠结每种状态的具体情况;
可以想出每行每列最多放两个棋子(我想到了吗?);
所以(为什么啊) 设计f[i][j][k]
表示DP到第i行,一列只有一个棋子的有j个,一列只有两个棋子的有k个;
清晰(模糊)转移方法
好,我们终于来到了第i行,加油;
这位OIer并不打算把棋子放在这一行,用f[i][j][k]直接继承f[i-1][j][k]的方案数;
然而(zhu)队友并不想就这样进入下一行,他要放棋子了!
请大家睁大眼睛,他在纠结
因为他最多只能放两个棋子,每一个棋子的位置都影响着当前的方案数;
他现在想放一个棋子,
两种选择:一,放在一列没有棋子的位置上,这样f[i][j][k]+=f[i][j-1][k]*(m-j+1-k)(乘法法则,有j-1个位置可以选)
二,放在一列只有一个棋子的位置上,这样f[i][j][k]+=f[i-1][j+1][k-1]*(j+1);
放两个棋子
(这个zhu队友想到现在头都大了,但是他离胜利不远了)
一,两个都放在没有棋子的一列,f[i][j][k]+=f[i-1][j-2][k]*(C(m-j-k+2)) (组合数,剩下的列中选两个位置,下面有代码)、
二,两个都放在有一个棋子的列上,f[i][j][k]+=f[i-1][j+2][k-2]*((j+2)*(j+1)/2) (组合数公式) (要时常记得,j+k<=m,如果放在j上,k会增加,j会减小)
三,一个放在没有棋子的列上,一个放在有一个棋子的列上,f[i][j][k]+=f[i-1][j][k-1]*j*(m-j-k+1) (j个位置有一个,但是一个放在这列j-1,另一个令j+1)
(队友阵亡,因为他没有判断边界);
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int mo=;
const int maxn=;
ll f[maxn][maxn][maxn];
int n,m;
ll C(ll x)
{
return (x*(x-)/);
}
ll ans;
int main()
{
scanf("%d%d",&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(k>=) f[i][j][k]+=f[i-][j+][k-]*(j+);
if(j>=) f[i][j][k]+=f[i-][j-][k]*(m-j-k+);
if(k>=) f[i][j][k]+=f[i-][j+][k-]*((j+)*(j+)/);
if(k>=) f[i][j][k]+=f[i-][j][k-]*j*(m-j-k+);
if(j>=) f[i][j][k]+=f[i-][j-][k]*C(m-j-k+);
f[i][j][k]%=mo;
}
}
}
for(int i=;i<=m;i++)
{
for(int j=;j<=m-i;j++)
{
ans+=f[n][i][j];
ans%=mo;
}
}
printf("%lld",ans);
return ;
}
P2051 [AHOI2009]中国象棋——DP(我是谁,我在哪,为什么)的更多相关文章
- Luogu P2051 [AHOI2009]中国象棋(dp)
P2051 [AHOI2009]中国象棋 题面 题目描述 这次小可可想解决的难题和中国象棋有关,在一个 \(N\) 行 \(M\) 列的棋盘上,让你放若干个炮(可以是 \(0\) 个),使得没有一个炮 ...
- [P2051 [AHOI2009]中国象棋] DP
https://www.luogu.org/problemnew/show/P2051 题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一 ...
- 洛谷P2051 [AHOI2009]中国象棋(dp)
题面 luogu 题解 \(50pts:\)显然是\(3\)进制状压\(dp\) \(100pts:\) 一行一行地考虑 \(f[i][j][k]\)表示前\(i\)行,有\(j\)列放了一个,有\( ...
- 洛谷 P2051 [AHOI2009]中国象棋 状态压缩思想DP
P2051 [AHOI2009]中国象棋 题意: 给定一个n*m的空棋盘,问合法放置任意多个炮有多少种情况.合法放置的意思是棋子炮不会相互打到. 思路: 这道题我们可以发现因为炮是隔一个棋子可以打出去 ...
- [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]中国象棋
题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法.大家肯定很清楚,在中国象棋中炮的行走方式是 ...
- P2051 [AHOI2009]中国象棋
题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法.大家肯定很清楚,在中国象棋中炮的行走方式是 ...
随机推荐
- 嗯。。 差不多是第一道自己搞出的状态方程 hdu4502 有一点点变形的背包
吉哥系列故事——临时工计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tot ...
- Abp SSO
官方的文档有个坑. 首先建立的应该是 .net core MPA版本. 把文档上的startup.cs配置写入 MVC 项目中. 这样测试才能通过.不然,测试项目 var disco = a ...
- ZROI17普及23-A.如烟题解--技巧枚举
题目链接 因版权原因不予提供 分析 别看这是普及模拟赛,其实基本上是提高难度...像这题做NOIpT1的话也说的过去 有个很显然的暴力思路就是枚举c,a,b,时间复杂度\(O(N^3)\), 然后正解 ...
- Go part 5 结构体,方法与接收器
结构体 结构体定义 结构体的定义只是一种内存布局的描述(相当于是一个模板),只有当结构体实例化时,才会真正分配内存空间 结构体是一种复合的基本类型,通过关键字 type 定义为 自定义 类型后,使结构 ...
- FastDFS高可用集群架构配置搭建及使用
一,概述FastDFS 是一个开源的高性能分布式文件系统(DFS). 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡.FastDFS 系统有三个角色:跟踪服务器(Tracker ...
- CircularSlider半弧形滑动条
前言 这边文章主要 是写 一.半圆弧型滑块的设计 最近项目中需要用到半圆弧形滑块,其作用和UISlider差不多,用于拖动改变播放音乐的播放进度. 大概样子是这样的: 效果展示 特点如下: 滑动响应区 ...
- leetcode-102.层序遍历二叉树(正序)· BTree
题面 Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to rig ...
- selenium网页截图和截图定位(无界面)phantomjs
phantomjs是一款软件,需要重新安装. 参考: https://blog.csdn.net/liyahui_3163/article/details/79064108 案例代码: from se ...
- ASTA存在的问题
1.客户端执行一个查询,提示xx字段不存在.跟踪代码,原来服务端ADOQuery设置BCD返回,客户端AstaClientDataSet在设计期加了字段是ftFloat类型,这两个类型不同产生的错误. ...
- Image Processing and Analysis_15_Image Registration:Image registration methods a survey——2003
此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...