传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1087

令f(i, j, k)表示前i列,二进制状态为j,已经用了k个国王的方案数,则

f(i, j, k) = sigma(i - 1, p, k - num[j]),其中可以从p状态转化到j状态,num[j]表示j状态下的国王数。

乍一看可能会超时,因为共有n * 2^n * n^2个状态,即状态数为O(n^3 * 2^n),转移的复杂度为O(2^n),因此总时间复杂度为O(n^3 * 2^2n),严重超时,其实不然。首先很多状态本身就不合法,比如邻接着的两个国王,这就已经剔除很多状态了,然后能转移过来的状态就更少了,所以不会超时的。

#include <cstdio>
#include <cstring> int n, kk, num[515], S[515];
long long f[11][515][85], ans;
int head[515], next[512 * 512], to[512 * 512], lb; inline void ist(int aa, int ss) {
to[lb] = ss;
next[lb] = head[aa];
head[aa] = lb;
++lb;
} int main(void) {
memset(next, -1, sizeof next);
memset(head, -1, sizeof head);
scanf("%d%d", &n, &kk);
for (int i = 0; i < (1 << n); ++i) {
S[i] = (1 << n) - 1;
for (int j = 0; j < n; ++j) {
if (i >> j & 1) {
++num[i];
if (j) {
if (i >> (j - 1) & 1) {
num[i] = -1;
break;
}
S[i] &= (~(1 << (j - 1)));
}
S[i] &= (~(1 << j));
if (j < n - 1) {
S[i] &= (~(1 << (j + 1)));
}
}
}
}
for (int i = 0; i < (1 << n); ++i) {
if (num[i] == -1) {
continue;
}
for (int j = 0; j < (1 << n); ++j) {
if (num[j] != -1 && (S[i] | j) == S[i]) {
ist(i, j);
}
}
} f[0][0][0] = 1;
for (int i = 1; i <= n; ++i) {
for (int j = 0; j < (1 << n); ++j) {
for (int k = num[j]; k <= kk; ++k) {
for (int p = head[j]; p != -1; p = next[p]) {
f[i][j][k] += f[i - 1][to[p]][k - num[j]];
}
}
}
}
for (int j = 0; j < (1 << n); ++j) {
ans += f[n][j][kk];
}
printf("%lld\n", ans);
return 0;
}

  

_bzoj1087 [SCOI2005]互不侵犯King【dp】的更多相关文章

  1. BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]

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

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

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

  3. bzoj 1087 [SCOI2005]互不侵犯King 状态压缩dp

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MB[Submit][Status][Discuss] Descripti ...

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

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

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

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

  6. SCOI2005互不侵犯King

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

  7. 洛谷1377 M国王 (SCOI2005互不侵犯King)

    洛谷1377 M国王 (SCOI2005互不侵犯King) 本题地址:http://www.luogu.org/problem/show?pid=1377 题目描述 天天都是n皇后,多么无聊啊.我们来 ...

  8. 1087: [SCOI2005]互不侵犯King

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

  9. 洛谷P1896 [SCOI2005]互不侵犯King

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

随机推荐

  1. 电脑控制手机的另一选择——android vnc server

    近来发现的Android上的原生VNC Server,就是说只要手机上安装并运行这个软件,即可实现电脑上查看并控制手机了. 首先是手机端. 1)下载androidvncserver: http://c ...

  2. Activity调用isDestroyed()方法报出,java.lang.NoSuchMethodError

    在測试App的过程中,Activity调用了isDestroyed()方法,报出了java.lang.NoSuchMethodError错误. 自己手机MI 2S,版本号4.1.1. 事实上原因就是i ...

  3. soapUI系列之—-01 介绍soapUI简介,groovy 简介

    1.soapui简介 SoapUI是一个自由和开放源码的跨平台功能测试解决方案.通过一个易于使用的图形界面和企业级功能,SoapUI让您轻松,快速创建和执行自动化功能.回归.合规和负载测试.在一个测试 ...

  4. Swift String 一些经常用法

    直接上代码 //字符串 //1 推断字符串是否为空 var test1Str="" var test1Str2:String = String(); println("t ...

  5. jquery获取input值的各种情况

    jQuery获取多种input值的方法 获取input的checked值是否为true: 第一种: if($("input[name=item][value='val']").at ...

  6. 【CSS3动画实战】Mailman Icon

    周末闲来无事,就想着做点东西练练手.又苦于自己 PS 水平太差,设计不出什么好看的东西. 干脆就在 Dribbble 上逛一逛,看看有什么看起来比较屌的,实际上却很简单的东西. 一共做了 3 个,均已 ...

  7. sublime text 3 乱码

    sublime text 是一款很好用的文字编辑软件,可谓是程序员必备,但是最近发现在mac端使用的时候,中文乱码, 网上一些解决方案,抄袭严重,没有解决实际问题,所以记录下自己解决问题的过程. 1. ...

  8. 转载 Url编码

    http://www.cnblogs.com/artwl/archive/2012/03/07/2382848.html 混乱的URI编码 JavaScript中编码有三种方法:escape.enco ...

  9. scrapy框架的解析

    1,scrapy框架的官网:https://scrapy.org/ 什么是scrapy框架: scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用内框架,非常出名,所谓框架就是一个已经继承 ...

  10. Codeforces Round #419 (Div. 1) C. Karen and Supermarket 树形DP

    C. Karen and Supermarket     On the way home, Karen decided to stop by the supermarket to buy some g ...