题目大意:给定n*n的国际象棋棋盘。在上面放k个国王,要求国王之间互不攻击。求方案数

n<=⑨

状压DP。将每一行的方案二进制压成一维,令f[i][j][k]为第i行用去j个国王状态为k的方案数。然后状态转移例如以下:

f[i][j][k]=Σf[i-1][j-digit[k]][l]

当中l&k=0,l>>1&k=0,l<<1&k=0,digit[k]为k的二进制中1的个数

暴力转移就可以

记得开long long

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
int n,m;
bool map[512][512],usable[512];
ll f[10][100][512],ans;
int digit[512];
bool Judge(int x,int y)
{if(x&y)return false;if(x<<1&y)return false;if(x>>1&y)return false;return true;
}
bool Usable(int x)
{if(x<<1&x)return false;if(x>>1&x)return false;return true;
}
int Get_Digit(int x)
{int re=0;while(x)re+=x&1,x>>=1;return re;
}
int main()
{int i,j,k,l;cin>>n>>m;for(i=0;i<1<<n;i++)for(j=0;j<1<<n;j++)if( Judge(i,j) )map[i][j]=1;for(i=0;i<1<<n;i++)digit[i]=Get_Digit(i);for(i=0;i<1<<n;i++)usable[i]=Usable(i);f[0][0][0]=1;for(i=1;i<=n;i++)for(j=0;j<=m;j++)for(k=0;k<1<<n;k++)if(usable[k]&&digit[k]<=j)for(l=0;l<1<<n;l++)if(usable[l]&&map[k][l]&&digit[k]+digit[l]<=j)f[i][j][k]+=f[i-1][j-digit[k]][l];for(i=0;i<1<<n;i++)ans+=f[n][m][i];cout<<ans<<endl;
}

BZOJ 1087 SCOI2005 互不侵犯King 状压DP相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 算法设计与分析 搜索第k元
  2. python 计算机程序设计基础-零基础,没有编程和计算机基础,究竟该怎么自学python?...
  3. C++虚函数的实现方式
  4. 计算机二级vb知识点汇总,计算机二级vb基础知识考点整理(13页)-原创力文档...
  5. 【C语言】有3个数a,b,c,要求按大小顺序把它们输出(基础法)
  6. C++:30 ---C++类成员,成员函数的内存布局
  7. 201521123061 《Java程序设计》第三周学习总结
  8. java 虚基类_重拾C++之虚函数和虚基类以及抽象类
  9. Node2vec原理剖析,代码实现
  10. yylabel支持html ios,iOS简单高性能标签TagView(巧用YYLabel)
  11. HZK16汉字16*16点阵字库的使用及实例程序
  12. Python爬虫爬取豆瓣TOP250
  13. 简单推箱子java_Java实现简单推箱子游戏
  14. 实时Javascript开发框架Clouda、Meteor、Firebase对比
  15. Table ‘xxx‘ is specified twice, both as a target for ‘UPDATE‘ and as a separate source for data
  16. Python基础 —— 输入输出
  17. 来自 Serenity 的 Java 8 的一些使用技巧
  18. sv_labs学习笔记——sv_lab1(System Verilog)
  19. MS SQL数据库备份和恢复
  20. spring --jia包依赖坐标收集

热门文章

  1. kotlin内联函数_Kotlin内联函数,参数化
  2. 开课吧:AI智能语言产品会运用到哪些技术?
  3. 机器学习入门05 - 泛化 (Generalization)
  4. shell替换某个目录下某个文件类型里的内容
  5. 面试:输出循环小数的循环节
  6. 防止服务器变为代理服务器
  7. Java学习笔记1:Java中有关print、println、printf的用法和区别
  8. Flask部署工具的安装与使用
  9. TypeError: Layout of the output array image is incompatible with cv::Mat
  10. ValueError: could not broadcast input array from shape (*,*) into shape (*)