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

首先不难想到状态压缩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. 基础之ThreadStatic

    public class Bean { public Bean() { } public static String Current { get { if (guid == null) guid = ...

  2. ASCII Table/ASCII表

    ASCII Table/ASCII表 参考: 1.Table of ASCII Characters

  3. C++异常处理(Exception Handling)

    在C++中引入了三种操作符来处理程序的出错情况,分别是:try  , throw  ,  catch 1.基本的用法如下: try{ //code to be tried throw exceptio ...

  4. c++ 继承学习笔记

    三大继承原则(由我杜撰) 基类的私有成员被继承后不可见(优先级最高) 公有继承不改变基类成员属性 保护继承(私有继承)把基类成员变为保护成员(私有成员)

  5. C++ IO 详细用法

    http://www.cnblogs.com/keam37/ keam所有 转载请注明出处 本文将分别从<iostream>,<sstream>,<fstream> ...

  6. strcpy函数导致release版程序崩溃

    最近在写一个读取模型文件的小程序.很随意的使用了strcpy函数进行char字符数组的拷贝,这个数组是需要传递给PostMessage作为WPARAM的参数.代码部分如下: char pStrCurr ...

  7. 服务器设置Apache对htaccess支持

    root权限下运行a2enmod(a2enmod是一个可以配置Apache的工具,a2enmod是属于apache2.2-common包下的一个工具),然后输入rewrite启动apache对于.ht ...

  8. htmlt中的块状元素与内联元素

    块元素(block element) address - 地址 blockquote - 块引用 center - 举中对齐块 dir - 目录列表 div - 常用块级容易,也是CSS layout ...

  9. 通过LDF文件实现日志回滚将数据恢复(转)

    该方法数据库恢复(www.db-recovery.com)思路 1. 创建数据TEST 2. 创建表TEMP_01 3. 在表TEMP_01中插入100条数据 4. 备份现有的数据库 5. 再次向表T ...

  10. gwt 创建 超链接cell (HyperTextCell)

    package com.cnblogs.hooligen.client; import com.google.gwt.cell.client.AbstractCell; import com.goog ...