唔...今天学了状压就练练手...

点我看题

这题的话,我感觉算是入门题了QAQ...

然而我还是想了好久...

大致自己推出了方程,但是一直挂,调了很久选择了题解 坚持不懈的努力的调代码。

然后发现题解的方程和我一毛一样呀QAQ

然后就又开始无限调调调QAQ最后发现自己统计答案没放循环里...气哇QAQ看都之后哇的一声哭出来。

好吧进入正题吧。

设 f[i,j,k] 表示 放到第 i 行,第 i 行状态为 j 且总共放了 k 个的方案数。

然后方程就是  f[i,j,k+num[j]]+=f[i-1,x,k]

就是枚举一个 x 表示 第 i-1 层的状态,然后判其是否合法。

刚开始的时候懒的预处理,后来发现预处理代码更短就改了QAQ是的我是懒兔纸。

所以我萌预处理一个 num[i] 表示 状态为 i 中的 1 个数有多少个,也就是放了多少个国王。

顺便对于 不合法的状态 i 的num[i]=-1

然后对于枚举的每一个 x 直接暴力判 j 和 x 这两个状态合起来后是否合法。

暴力判的原因是我懒得预处理QAQ

然后 就枚举 k 表示 前 i-1 行已经放了 k 个国王。

辣么k+num[j] 就是第 i 行放完后的个数。

显然 k 的范围是 num[x]<=k<=m-num[j]

然后就愉快的水过去了,虽然wa了一次,因为longlong。

总的来说今天的状态压缩学得还不错=v=

 var
i,j,k,x:longint;
n,m:longint;
f:array[..,..,..]of int64;
ans:int64;
num:array[..]of longint;
function isnot(i,x:longint):boolean;
begin
exit(( << (i-))and x>);
end;
function ok(x:longint):longint;
var i:longint;
num:longint;
begin
num:=;
for i:= to n do
begin
if isnot(i,x) and((i>)and isnot(i-,x)) then exit(-);
if isnot(i,x) then inc(num);
end;
exit(num);
end;
function check(x,y:longint):boolean;
var i:longint;
begin
for i:= to n do
begin
if isnot(i,x) then
if ((i>)and(isnot(i-,y)))or(isnot(i,y))or((i<n)and(isnot(i+,y))) then exit(false);
end;
exit(true);
end;
begin
read(n,m);
f[,,]:=;
for j:= to ( << n)- do
num[j]:=ok(j);
for i:= to n do
for j:= to ( << n)- do
begin
if num[j]>= then
begin
for x:= to( << n)- do
if (num[x]>=)and(check(j,x)) then
begin
for k:=num[x] to m do
if k+num[j]<=m then
inc(f[i,j,k+num[j]],f[i-,x,k]);
end;
end;
if i=n then inc(ans,f[i,j,m]);
end;
writeln(ans);
end.

bzoj1087

bzoj1087: [SCOI2005]互不侵犯King (codevs2451) 状压dp的更多相关文章

  1. BZOJ1087 SCOI2005 互不侵犯King 【状压DP】

    BZOJ1087 SCOI2005 互不侵犯King Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附 ...

  2. 状压入门--bzoj1087: [SCOI2005]互不侵犯King【状压dp】

    Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子. Input 只有一行, ...

  3. BZOJ 1087:[SCOI2005]互不侵犯King(状压DP)

    [SCOI2005]互不侵犯King [题目描述] 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子 ...

  4. [Bzoj1083][SCOI2005]互不侵犯king(状压dp)

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4595  Solved: 2664[Submit][ ...

  5. 【BZOJ1087】[SCOI2005] 互不侵犯King(状压DP)

    点此看题面 大致题意: 在\(N×N\)的棋盘里面放\(K\)个国王,使他们互不攻击,共有多少种摆放方案(国王能攻击到它周围的8个格子). 状压\(DP\) 一看到这道题我就想到了经典的八皇后问题,但 ...

  6. 【BZOJ】1087: [SCOI2005]互不侵犯King(状压dp)

    http://www.lydsy.com:808/JudgeOnline/problem.php?id=1087 状压dp是第一次写啊,我也是才学TAT.状压dp一般都用一个值表示集合作为dp的一个状 ...

  7. 1087. [SCOI2005]互不侵犯King【状压DP】

    Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子. Input 只有一行, ...

  8. BZOJ 1087 [SCOI2005]互不侵犯King(状压DP)

    题意:在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子.n<=9 思路:状压dp,dp[i][ ...

  9. [luoguP1896] [SCOI2005]互不侵犯King(状压DP)

    传送门 先预处理出来一行中放置国王的所有情况和每种情况所用的国王个数. f[i][j][k]表示前i行放j个国王且最后一行的状态为k的方案数 状压DP即可 #include <cstdio> ...

随机推荐

  1. [转]通过apk签名使应用程序有系统权限

    [转]通过apk签名使应用程序有系统权限 (2013-01-08 13:40:50) 转载▼ 标签: it 分类: Android 出处:http://blog.csdn.net/doom66151/ ...

  2. QuantStart量化交易文集

    Over the last seven years more than 200 quantitative finance articles have been written by members o ...

  3. android开发笔记(二)导入项目到eclipse和另一个项目

    NND,eclipse里导入工程出现问题了,整了半天,来个这问题,无效工程描述,找了半天看.projec文件是否工程名对应,看androidManifest.XML换里面的代码版本号,我擦都无济于事. ...

  4. 并发编程 - IO模型 - 1.io模型/2.阻塞io/3.非阻塞io/4.多路复用io

    1.io模型提交任务得方式: 同步:提交完任务,等结果,执行下一个任务 异步:提交完,接着执行,异步 + 回调 异步不等结果,提交完任务,任务执行完后,会自动触发回调函数同步不等于阻塞: 阻塞:遇到i ...

  5. 剑指Offer——平衡二叉树

    题目描述: 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 分析: 平衡二叉树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质 ...

  6. 剑指Offer——二叉树的深度

    题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 分析: 二叉树的深度等于其左子树的深度和右子树的深度两个中最大的深 ...

  7. VirtualBox中安装Ubuntu12.04/Ubuntu14.04虚拟机(转)

    add by zhj: 如果宿主机是win7,那VirtualBox建议安装4.3.12,再高的版本在Windows7上运行会报错,从4.3.14到5.0.xx版本,一直报错,搞了半天也解决不了.如果 ...

  8. Python并行编程(六):线程同步之条件

    1.基本概念 条件指的是应用程序状态的改变.其中某些线程在等待某一条件发生,其 他线程会在该条件发生的时候进行通知,一旦条件发生,线程会拿到共享资源的唯一权限. 2.示例代码 from threadi ...

  9. notepad插件:url变成可以点击的连接

  10. Java网络通信基础编程

    一.同步阻塞方式(BIO) 方式一: 服务器端(Server): package com.ietree.basicskill.socket.mode1; import java.io.IOExcept ...