【BZOJ】1801 [Ahoi2009]chess 中国象棋(dp)
题目
传送门:QWQ
分析
发现我们关心的不是棋子的位置,我们只关心棋子数量就ok。
首先每行每列最多两个棋子。这是显然的。
然后我觉得本题最难的部分就是对行进行讨论,蒟蒻我一直被限制在了对格点讨论。。。。
$dp[i][j][k] $放了前$i$行,有$j$列有1个棋子,有$k$列有2个棋子。转移就很显然了。
代码
#include <bits/stdc++.h>
typedef long long ll;
const int maxn=;const ll MOD=; ll dp[maxn][maxn][maxn];
//dp[i][j][k] 放了前i行,有j列有1个棋子,有k列有2个棋子
ll num(int x){return ll(x)*ll(x-)/;}
using namespace std;
int main(){
int n,m;scanf("%d%d",&n,&m);
dp[][][]=;
for(int i=;i<n;i++){ //放第i+1行
for(int j=;j<=m;j++){
for(int k=;k+j<=m;k++){
dp[i+][j][k]=(dp[i+][j][k]+dp[i][j][k])%MOD;
if(m-j-k>=) dp[i+][j+][k]=(dp[i+][j+][k]+dp[i][j][k]*(m-j-k))%MOD;
if(j>=) dp[i+][j-][k+]=(dp[i+][j-][k+]+dp[i][j][k]*j)%MOD;
if(m-j-k>=) dp[i+][j+][k]=(dp[i+][j+][k]+dp[i][j][k]*num(m-j-k))%MOD;
if(j>=) dp[i+][j-][k+]=(dp[i+][j-][k+]+dp[i][j][k]*num(j))%MOD;
if(m-j-k>= && j>=) dp[i+][j][k+]=(dp[i+][j][k+]+dp[i][j][k]*(m-j-k)*j)%MOD;
}
}
}
ll ans=;
for(int i=;i<=m;i++)
for(int j=;j+i<=m;j++)
ans=(ans+dp[n][i][j])%MOD;
printf("%lld\n",ans);
return ;
}
【BZOJ】1801 [Ahoi2009]chess 中国象棋(dp)的更多相关文章
- BZOJ 1801: [Ahoi2009]chess 中国象棋( dp )
dp(i, j, k)表示考虑了前i行, 放了0个炮的有j列, 放了1个炮的有k列. 时间复杂度O(NM^2) -------------------------------------------- ...
- BZOJ 1801: [Ahoi2009]chess 中国象棋 [DP 组合计数]
http://www.lydsy.com/JudgeOnline/problem.php?id=1801 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放 ...
- [BZOJ 1801] [Ahoi2009]chess 中国象棋 【DP】
题目链接:BZOJ - 1801 题目分析 对于50%的数据是可以直接状压 DP 的. 对于100%的数据,使用递推的 DP .(或者这只叫递推不叫 DP ?) 可以发现,每一行和每一列的棋子个数不能 ...
- bzoj 1801: [Ahoi2009]chess 中国象棋【dp】
注意到一行只能放012个炮,我们只需要知道列的状态,不用状压行 所以设f[i][j][k]表示前i行有j列有1个炮,有k列有2个炮的方案数 然后分情况讨论转移就行了 #include<cstdi ...
- bzoj 1801: [Ahoi2009]chess 中国象棋
Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮的行走方式大家应该很清楚吧. Input 一行包含两个整数N, ...
- Bzoj 1081 [Ahoi2009] chess 中国象棋
bzoj 1081 [Ahoi2009] chess 中国象棋 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1801 状态比较难设,的确 ...
- 【BZOJ1801】[Ahoi2009]chess 中国象棋 DP
[BZOJ1801][Ahoi2009]chess 中国象棋 Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮 ...
- BZOJ——T 1801: [Ahoi2009]chess 中国象棋
http://www.lydsy.com/JudgeOnline/problem.php?id=1801 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: ...
- bzoj1801: [Ahoi2009]chess 中国象棋 dp
题意:在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮的行走方式大家应该很清楚吧. 题解:dp[i][j][k]表示到了第i行,有j列 ...
随机推荐
- JNI.ZC_文件(.so/.h)位置
1.我在做 Android 操作串口的时候,使用的是 "android-serialport-api-master.zip",它所带的 .so文件 的位置是 "??\an ...
- Android之修改用户头像并上传服务器(实现手机拍照和SD卡选择上传)
写了这么多个的APP,最近才把他这个功能写上来,就抽取其中的用户修改头像的相关操作这个功能写了这篇博客,来与大家分享,希望对你有所帮助. 案例包含了: Xutil图片上传 拍照和SD卡选择图片 图片缓 ...
- UVA-1343 The Rotation Game (IDA*)
题目大意:数字1,2,3都有八个,求出最少的旋转次数使得图形中间八个数相同.旋转规则:对于每一长行或每一长列,每次旋转就是将数据向头的位置移动一位,头上的数放置到尾部.若次数相同,则找出字典序最小旋转 ...
- JS BOM操作
Bom:浏览器对象模型(Browser Object Model,简称 BOM)提供了独立于内容而与浏览器窗口进行交互的对象.描述了与浏览器进行交互的方法和接口,可以对浏览器窗口进行访问和操作 (1) ...
- Java Mongodbjar包下载网址
http://mongodb.github.io/mongo-java-driver/
- BootStrap--scroll
滚动侦测 滚动侦测基本使用方法为: <body data-spy="scroll"> <nav class="navbar navbar-default ...
- Android Studio 编译报错:Process 'command 'D:\SDK\AS\sdk\build-tools\23.0.0\aapt.exe'' finished with non-zero exit value 1
AGPBI: {"kind":"error","text":"No resource identifier found for a ...
- LRY_FX_Assist(辅助EA)
功能说明 辅助EA就是别的EA没有功能用这个EA来弥补,比如说风控设置(预付款.浮亏.加仓层数等达到多少进行操作),移动止损(包括隐藏移动止损),启动马丁加仓等.这个EA不能自己独立开单,只能辅助其它 ...
- 2018.12.4 王二的经济学故事 DYNASTIES
1从王二卖粮食:外汇储备缩水 2王二兑酒:固定汇率与变动汇率 3苹果换梨子:固定汇率的代价 4跨港购物:一价定律,汇率的价格传递效应 5富人吃透,春运火车票涨价:供需问题,弱者保护,让富人多消费,给穷 ...
- Winform开发常用控件之DataGridView的简单数据绑定——自动绑定
DataGridView控件可谓是Winform开发的重点控件,对于数据的呈现和操作非常方便,DataGridView可谓是既简单又复杂.简单在于其已经集成了很多方法,复杂在于可以使用其实现复杂的数据 ...