bzoj1801
题目就是每行每列最多放两个炮的意思;
首先不难想到状态压缩dp,但是当n,m<=100的时候显然会跪掉;
考虑每行最多就2个点,状压dp浪费了大量的空间
由于每行最多两个点,我们可以直接用f[i,j,k]表示状态到第i行放1个炮有j列,2个炮有k列
方程具体见程序
const re=;
var f:array[..,..,..] of int64;
i,j,n,p,k,m:longint;
ans:int64;
function c2(x:int64):int64;
begin
c2:=x*(x-) div mod re;
end;
begin
readln(n,m);
f[,,]:=;
ans:=;
p:=;
for i:= to n do
begin
p:=-p;
for j:= to m do
for k:= to m-j do
begin
f[p,j,k]:=f[-p,j,k];
if j> then
f[p,j,k]:=(f[p,j,k]+f[-p,j-,k]*(m-j-k+) mod re) mod re;
if (k>) and (j<m) then
f[p,j,k]:=(f[p,j,k]+f[-p,j+,k-]*(j+) mod re) mod re;
if (j>) then
f[p,j,k]:=(f[p,j,k]+f[-p,j-,k]*c2(m-j-k+) mod re) mod re;
if (j>) and (k>) then
f[p,j,k]:=(f[p,j,k]+f[-p,j,k-]*(m-j-k+)*j mod re) mod re;
if (k>) and (j<m-) then
f[p,j,k]:=(f[p,j,k]+f[-p,j+,k-]*c2(j+) mod re) mod re;
end;
end;
for i:= to m do
for j:= to m-i do
ans:=(ans+f[p,i,j]) mod re;
writeln(ans);
end.
const re=;
var f:array[..,..,..] of int64;
i,j,n,p,k,m:longint;
ans:int64;
function c2(x:int64):int64;
begin
c2:=x*(x-) div mod re;
end;
begin
readln(n,m);
f[,,]:=;
ans:=;
p:=;
for i:= to n do
begin
p:=-p;
for j:= to m do
for k:= to m-j do
begin
f[p,j,k]:=f[-p,j,k];
if j> then
f[p,j,k]:=(f[p,j,k]+f[-p,j-,k]*(m-j-k+) mod re) mod re;
if (k>) and (j<m) then
f[p,j,k]:=(f[p,j,k]+f[-p,j+,k-]*(j+) mod re) mod re;
if (j>) then
f[p,j,k]:=(f[p,j,k]+f[-p,j-,k]*c2(m-j-k+) mod re) mod re;
if (j>) and (k>) then
f[p,j,k]:=(f[p,j,k]+f[-p,j,k-]*(m-j-k+)*j mod re) mod re;
if (k>) and (j<m-) then
f[p,j,k]:=(f[p,j,k]+f[-p,j+,k-]*c2(j+) mod re) mod re;
end;
end;
for i:= to m do
for j:= to m-i do
ans:=(ans+f[p,i,j]) mod re;
writeln(ans);
end.
bzoj1801的更多相关文章
- 【BZOJ1801】【AHOI2009】中国象棋(动态规划)
[BZOJ1801][AHOI2009]中国象棋(动态规划) 题面 题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个 ...
- BZOJ1801 [Ahoi2009]chess 中国象棋 动态规划
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1801 题意概括 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请 ...
- 【BZOJ1801】[Ahoi2009]chess 中国象棋 DP
[BZOJ1801][Ahoi2009]chess 中国象棋 Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮 ...
- BZOJ1801 Ahoi2009 chess 中国象棋 【DP+组合计数】*
BZOJ1801 Ahoi2009 chess 中国象棋 Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮的行 ...
- BZOJ1801:[Ahoi2009]chess 中国象棋
Time Limit: 10 Sec Memory Limit: 64 MB Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置 ...
- bzoj1801[AHOI2009]CHESS中国象棋
题意:在棋盘上放一些炮使得它们不互相攻击.其实就是一行/一列最多放两个. 50分的数据中n,m至少有一个不超过8,比较直接的想法是对n/m中较小的一维做状态压缩,状态f[i][S1][S2]表示在前i ...
- [BZOJ1801][AHOI2009]中国象棋(递推)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1801 分析: 只会50的状态压缩…… 然后搜了下题解,发现是dp 首先易得每行每列至多 ...
- [luogu2051][bzoj1801][AHOI2009]chess中国象棋【动态规划】
题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法.大家肯定很清楚,在中国象棋中炮的行走方式是 ...
- bzoj1801: [Ahoi2009]chess 中国象棋 dp
题意:在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮的行走方式大家应该很清楚吧. 题解:dp[i][j][k]表示到了第i行,有j列 ...
随机推荐
- InstallShield Custom Dialog
InstallShield 2008 Screen Layout is designed as below. Use toolbox to edit screen layout. 1> Set ...
- 九度OJ 1207 质因数的个数
题目地址:http://ac.jobdu.com/problem.php?pid=1207 题目描述: 求正整数N(N>1)的质因数的个数. 相同的质因数需要重复计算.如120=2*2*2*3* ...
- svn 项目转移
http://www.cnblogs.com/techMichaelLee/p/3193197.html (参考) svnadmin dump /home/svn/project > /home ...
- debian 学习记录-4 -关于linux -2
来源:<Debian标准教程>王旭 著 Slackware.Debian.RedHat.SuSE 这4种发布版是当今大部分发布版的前去,虽然SuSE衍生自Slackware,但由于其技术变 ...
- 第二章 Qt常用工具的介绍
第二章 Qt常用工具的介绍 (1)No.1 qmake 相信编写过Makefile的开发人员,随着工程中源码的级数递增和以类型.功能.模块组织源码的子目录的增多,都不愿意重复机械地手工编写这个工程管理 ...
- rpm的一些用法
rpm2cpio *.rpm | cpio -imd #解压一个rpm包 rpm -ivh *.rpm --force #强制安装这个rpm包 rpm -ivh *.rpm ...
- HTMLImageElement类型的简便利用
这个是我在复习书籍的时候看见的,当时一个同学想通过页面发送请求,但是数据量不是太大,所以用的get方式,但是页面用表单提交请求的话会让页面进行跳转,当时我在网上查了一点资料,发现基本上都是通过ajax ...
- jQuery Mobile里xxx怎么用呀? (事件篇)
jQuery Mobile里$(document).ready()怎么用呀? 相关链接: http://stackoverflow.com/questions/14468659/jquery-mobi ...
- sae-多个file_put_contents('saestor://public/text.txt',$data);只写第一次
多个file_put_contents('saestor://public/text.txt',$data); 只执行第一个文件的写入,永久存储也只需要一次写入 如果需要用户中间缓存文件,用tmpfs ...
- yii YII小部件 创建登录表单表单 Login表单
YII框架必须遵循其表单的创建方法 登录模型错做与数据库操作模型是一致的,不同的是不跟数据库交互 ,用的是小部件,在创建表单之前,要在用户控制模块完成以下代码 protected --models - ...