题目就是每行每列最多放两个炮的意思;

首先不难想到状态压缩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的更多相关文章

  1. 【BZOJ1801】【AHOI2009】中国象棋(动态规划)

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

  2. BZOJ1801 [Ahoi2009]chess 中国象棋 动态规划

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1801 题意概括 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请 ...

  3. 【BZOJ1801】[Ahoi2009]chess 中国象棋 DP

    [BZOJ1801][Ahoi2009]chess 中国象棋 Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮 ...

  4. BZOJ1801 Ahoi2009 chess 中国象棋 【DP+组合计数】*

    BZOJ1801 Ahoi2009 chess 中国象棋 Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮的行 ...

  5. BZOJ1801:[Ahoi2009]chess 中国象棋

    Time Limit: 10 Sec  Memory Limit: 64 MB Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置 ...

  6. bzoj1801[AHOI2009]CHESS中国象棋

    题意:在棋盘上放一些炮使得它们不互相攻击.其实就是一行/一列最多放两个. 50分的数据中n,m至少有一个不超过8,比较直接的想法是对n/m中较小的一维做状态压缩,状态f[i][S1][S2]表示在前i ...

  7. [BZOJ1801][AHOI2009]中国象棋(递推)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1801 分析: 只会50的状态压缩…… 然后搜了下题解,发现是dp 首先易得每行每列至多 ...

  8. [luogu2051][bzoj1801][AHOI2009]chess中国象棋【动态规划】

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

  9. bzoj1801: [Ahoi2009]chess 中国象棋 dp

    题意:在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮的行走方式大家应该很清楚吧. 题解:dp[i][j][k]表示到了第i行,有j列 ...

随机推荐

  1. C++ GUI Qt4编写的文本编辑器

    mainwindow.h: #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMenu> #include <QAction& ...

  2. python 自动化之路 day 05

    内容目录: 列表生成式.迭代器&生成器 装饰器 软件目录结构规范 模块初始 常用模块 1.列表生成式,迭代器&生成器 列表生成式 需求:列表[0, 1, 2, 3, 4, 5, 6, ...

  3. Kali-Linux之开启ssh服务

    需求:通过putty软件ssh到Kali-Linux系统 问题:默认情况下,Kali系统的ssh服务并没有开启 操作方法: 1.编辑sshd_config文件 root@kali:~# vi /etc ...

  4. 安装Apache Web 服务器软件

    Apache下载地址:http://pan.baidu.com/s/1kTKCEOn 1: 右击安装 2: 3: 4: 5:安装成功: 6:测试在浏览器地址栏输入:localhost; 会出现一个页面 ...

  5. Qt多文档界面应用设计

    使用Qt编写多文档界面(MDI)应用相当方便,主要会使用到QMdiArea和QMdiSubWindow两个类.可以查看Qt Asistant中这两个类的说明文档,里面介绍的相当详细.另外,可以搜索例程 ...

  6. Newtonsoft.Json.dll反序列化JSON字符串的方法

      1.直接反序列化JSON字符串 //引用序列化.反序列化JSON字符串用到的空间 using Newtonsoft.Json; using Newtonsoft.Json.Linq; //定义一个 ...

  7. 把DataSet转换成JSON

    /// <summary> /// dataTable转换成Json格式 /// </summary> /// <param name="dt"> ...

  8. A-Frame 简介03

    如果你想开始使用A-Frame可以通过以下几种方式: Play with CodePen Grab the Boilerplate Include the JS Build Install from ...

  9. 使用Github总结

    1. 使用Git GUI 首先熟悉一下GUI,如下: 第一步,首先将代码fork到自己的版本库下面,如下: 并获取clone URL,如下图: 然后点击GUI克隆已有版本库,如下图: 点击克隆就可以得 ...

  10. Linux下GPIO驱动(五) ----misc_register();

    // struct miscdevice { int minor; const char *name; const struct file_operations *fops; struct list_ ...