bzoj1087互不侵犯King(状压)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1087
简单的状压dp。但是wa了好几发。注意long long。
注意0和0的连边。而且不能连成两条,所以放在外面写。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=,M=<<;
int n,m,lm,list[M+][M+],cnt[M+],zt[M+],xnt,nm[M+];//那一维是N*N!
long long ans,dp[N][N*N][M+];//
int num(int s)
{
int cnt=;
while(s)cnt++,s-=(s&-s);
return cnt;
}
void init()
{
lm=(<<n);
for(int s=;s<lm;s++)
if(((s<<)&s)==)
{
zt[++xnt]=s;
nm[xnt]=num(s);
}
list[][++cnt[]]=;
for(int i=;i<=xnt;i++)
for(int j=i+;j<=xnt;j++)
if(((zt[i]<<)&zt[j])==&&((zt[i]>>)&zt[j])==&&(zt[i]&zt[j])==)
list[i][++cnt[i]]=j,list[j][++cnt[j]]=i;
}
int main()
{
scanf("%d%d",&n,&m);
init();
for(int i=;i<=xnt;i++)dp[][nm[i]][i]=;
for(int i=;i<=n;i++)
for(int s=;s<=xnt;s++)
for(int j=nm[s];j<=m;j++)
for(int k=;k<=cnt[s];k++)
dp[i][j][s]+=dp[i-][j-nm[s]][list[s][k]];
// printf("dp[%d][%d][%d]=%d(dp[%d][%d][%d]=%d) %d %d\n",i,j,s,dp[i][j][s],
// i-1,j-nm[s],list[s][k],dp[i-1][j-nm[s]][list[s][k]],zt[s],zt[list[s][k]]);
for(int i=;i<=xnt;i++)ans+=dp[n][m][i];
printf("%lld",ans);
return ;
}
bzoj1087互不侵犯King(状压)的更多相关文章
- BZOJ-1087 互不侵犯King 状压DP+DFS预处理
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2337 Solved: 1366 [Submit][ ...
- bzoj1087 互不侵犯King 状压dp+bitset
题目传送门 题目大意:中文题面. 思路:又是格子,n又只有9,所以肯定是状压dp,很明显上面一行的摆放位置会影响下一行,所以先预处理出怎样的二进制摆放法可以放在上下相邻的两行,这里推荐使用bitset ...
- bzoj1087互不侵犯King——状压DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1087 水题... 然而犯了两个致命小错误,调了好半天...详见注释. 代码如下: #incl ...
- 互不侵犯king (状压dp)
互不侵犯king (状压dp) 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子.\(1\le n\ ...
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- 【BZOJ1087】 [SCOI2005]互不侵犯King 状压DP
经典状压DP. f[i][j][k]=sum(f[i-1][j-cnt[k]][k]); cnt[i]放置情况为i时的国王数量 前I行放置情况为k时国王数量为J #include <iostre ...
- [BZOJ1087] [SCOI2005] 互不侵犯King (状压dp)
Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. Input 只有一行,包 ...
- BZOJ 1087 [SCOI2005]互不侵犯King ——状压DP
[题目分析] 沉迷水题,吃枣药丸. [代码] #include <cstdio> #include <cstring> #include <iostream> #i ...
- 【状压DP】bzoj1087 互不侵犯king
一.题目 Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上.下.左.右,以及左上.左下.右上.右下八个方向上附近的各一个格子,共8个格子. I ...
随机推荐
- hdu4678 Mine 规律或者博弈。(博弈的sg函数不懂我是找的规律)
链接:题意就是告诉你一个扫雷图里面每个雷的位置,有两个人,每个人都知道雷的确切位置,每个人一次可以点一部,问你谁能赢. 链接:http://acm.hdu.edu.cn/showproblem.php ...
- echarts在miniUI和ajax下动态渲染数据
<script src="echarts.js"></script> <script src="jquery-3.3.1.min.js&qu ...
- vue router使用query和params传参的使用
传参是前端经常需要用的一个操作,很多场景都会需要用到上个页面的参数,本文将会详细介绍vue router 是如何进行传参的,以及一些小细节问题.有需要的朋友可以做一下参考,希望可以帮到大家. Vue ...
- C++复习13.虚析构函数知识
C++ 虚析构函数 20131010 在C++中的虚函数作用是实现基于继承机制的多态,但是我们好像忽略了一种情况,就是虚析构函数.在C++继承机制中,虽然构造函数是不可以使用虚函数声明,但是析构函数是 ...
- ParentNodes、childNodes、children之间的区别
"parentNode" 常用来获取某个元素的父节点. 把 parentNodes 理解为容器, 在容器中有个子节点 例: <div id="parent" ...
- UITextField点击选中文字
1.先创建UITextField - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading ...
- Web访问控制
最近某婚介公司的实习生赵大胖的领导姚无发给赵大胖安排了一个任务: 给网站加上访问控制,游客不能访问看到美女的资料,只有注册的会员才能浏览. 赵大胖一时没有很好的思路,然后找到了研发组大佬老郑头. 老郑 ...
- Java调用本地方法又是怎么一回事
JNI JNI即Java Native Interface,它能在Java层实现对本地方法的调用,一般本地的实现语言主要是C/C++,其实从虚拟机层面来看JNI挺好理解,JVM主要使用C/C++ 和少 ...
- Jmter操作数据库
1.导入jdbc的jar包,因为jmeter本身不能直接连接mysql,所以需要导入第三方的jar包,来连接mysql,如下操作: 2.创建数据库连接如下: 3.配置mysql的url.端口号.账号. ...
- sql基础语法复习
约定:数据库名:test:表名:tb1,tb2,tb3…: 对象:数据库:database 表:table 列:column 索引:index 视图:view 存储过程:procedure 一.数据结 ...