1087: [SCOI2005]互不侵犯King

Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 2641 Solved: 1558
[Submit][Status][Discuss]Description
  在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上
左下右上右下八个方向上附近的各一个格子,共8个格子。

Input

  只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N * N)

Output

  方案数。

Sample Input

3 2
Sample Output

16
HINT
Source

【题解】【状压dp】
【f[i][j][k]表示前i行放j个的第k种方案】
【这道题要先预处理出可能的状态,再进行dp】

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
ll d[1024],f[10][100][1024],n,k,tot,ans;
bool p[1024],b[1024][1024];
int main()
{
    int i,j,l,t;
    scanf("%lld%lld",&n,&k);
    tot=(1<<n)-1;
    for(i=0;i<=tot;++i)
     if(!((i>>1)&i))
      {        for(j=i;j>0;j>>=1)
         d[i]+=(j&1);
        p[i]=true;
      }
    for(i=0;i<=tot;++i)
     if(p[i])
      for(j=0;j<=tot;++j)
       if(p[j])
        if((!(i&j))&&(!((i>>1)&j))&&(!((j>>1)&i)))
         b[i][j]=true;
    for(i=0;i<=tot;++i) f[1][d[i]][i]=1;
    for(t=2;t<=n;++t)
     for(i=0;i<=tot;++i)
      if(p[i])
       for(j=0;j<=tot;++j)
        if(p[j])
         if(b[i][j])
          for(l=d[i];l+d[j]<=k;++l)
           f[t][l+d[j]][j]+=f[t-1][l][i];
    for(i=0;i<=tot;++i)
     ans+=f[n][k][i];
    printf("%lld\n",ans);
    return 0;
}

转载于:https://www.cnblogs.com/lris-searching/p/9403156.html

【bzoj 1087】[SCOI2005]互不侵犯King(状压dp)相关推荐

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

    题目大意:给定n*n的国际象棋棋盘.在上面放k个国王,要求国王之间互不攻击.求方案数 n<=⑨ 状压DP.将每一行的方案二进制压成一维,令f[i][j][k]为第i行用去j个国王状态为k的方案数 ...

  2. BZOJ 1087 [SCOI2005]互不侵犯King ——状压DP

    [题目分析] 沉迷水题,吃枣药丸. [代码] #include <cstdio> #include <cstring> #include <iostream> #i ...

  3. BZOJ 1087: [SCOI2005]互不侵犯King

    二次联通门 : BZOJ 1087: [SCOI2005]互不侵犯King /*BZOJ 1087: [SCOI2005]互不侵犯King状压dp将每一行棋子的存在状态压成一个整数f[i][j][k] ...

  4. 【洛谷 P1896】[SCOI2005]互不侵犯(状压dp)

    题目链接 题意:在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 这是道状压\(DP\)好题啊.. ...

  5. 洛谷P1896 互不侵犯【状压DP】

    题目链接:P1896 互不侵犯 分析:普通的状压DP再多加一维记个数,然后找到能转移到当前的状态更新答案: #include<bits/stdc++.h> using namespace ...

  6. 【BZOJ1087】【codevs2451】互不侵犯,状压DP

    传送门1 传送门2 写在前面:第一次写状压DP,感觉还好,至少比数论好些,还有就是让我膜一发位运算-- 思路:一看数据范围n<=9而且是省选,就知道这个题九成是状态压缩,题目限制条件与上一行的摆 ...

  7. [BZOJ1087][SCOI2005]互不侵犯King

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

  8. BZOJ 2734 [HNOI2012]集合选数 (状压DP、时间复杂度分析)

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2734 题解 嗯早就想写的题,昨天因为某些不可告人的原因(大雾)把这题写了,今天再来写题解 ...

  9. bzoj 1072: [SCOI2007]排列perm(状压dp)

    1072: [SCOI2007]排列perm Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 2272  Solved: 1432 [Submit][ ...

  10. BZOJ 4416: [Shoi2013]阶乘字符串【状压DP

    --不那么裸的状压dp-- 当字符集大于21的时候直接输出不满足--原因啊----大了就跑不过了  --大概就是不能得到嘛[大佬们并没有讨论出结果在下只是听的题解[x 用f[i][j]表示第i个字符前 ...

最新文章

  1. php上下翻页,一个很不错的PHP翻页类
  2. 共享文件夹Access-Based Enumeration特性一览
  3. ImportError: cannot import name ‘python_2_unicode_compatible‘
  4. 修改C盘里windows\system32\etc里面的hosts文件并保存
  5. 编程语言大比拼——谁的效率高
  6. 获取页面所有属性并生成html6,JavaScript基础练习题(三)
  7. mfc 制作不同的文档模板mdi不同的子窗体_鹤岗水利渡槽钢模板设计-哈尔滨同顺钢模板...
  8. SQL:pgsql查询一段时间内每个小时的首条数据,为空返回0
  9. php 表单 sql,PHP表单发布到SQL后没有任何操作
  10. sharp.js中文文档
  11. matlab 8fsk,MFSK蒙特卡洛仿真与理论误码率的对比
  12. linux应用开发 — 控制LED设备
  13. 通过Excel对各个商品的销售分析
  14. 电脑电池,笔记本电脑
  15. c++“不允许使用不完整的类型“
  16. c语言一行黑白相间的瓷砖,磁砖样式——第八届蓝桥杯C语言B组(国赛)第二题...
  17. 【数据库学习】非关系数据库(NoSQL:“non-relational”)
  18. Python网络爬虫与信息提取(17)—— 题库爬取与整理+下载答案
  19. UR机器人通信接口总结
  20. java实现图片平铺倾斜水印效果--转载

热门文章

  1. 软件工程 第四章 概要设计
  2. 【两种方式】用python和ENVI画出高光谱遥感影像的3D立体图
  3. 卷积神经网络参数说明
  4. 支持向量机在风控竞赛数据集上的应用
  5. 如何使用更多数据更新神经网络模型
  6. try与raise用法
  7. mysql的管理与优化_MySQL管理与优化(9)_MySQL
  8. fv-15php1c 安装图,SQLite - C/C++接口 API(一)
  9. java c 网络_编程中Java与C/C++,Internet区别
  10. 支持向量机_支持向量机(SVM)说明及示例