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 ...
随机推荐
- Highcharts 时间序列,可缩放的图表;Highcharts X 轴翻转曲线图;Highcharts 带标记曲线图
Highcharts 时间序列,可缩放的图表 配置 图表 配置可缩放图表. chart.zoomType 指定了用户可以拖放的尺寸,用户可以通过拖动鼠标来放大,可能值是x,y或xy: var char ...
- js中页面加载完成后执行的几种方式及执行顺序
1:使用jQuery的$(function){}; 2:使用jquery的$(document).ready(function(){});前两者本质上没有区别,第1种是第2种的简写方式.两个是docu ...
- MongoHelper.cs
using System; using MongoDB.Bson; using MongoDB; using System.Web; using MongoDB.Driver; namespace Y ...
- 基于C#在Mongodb的Skip-Limit和Where-Limit的分页对比 并且含mongodb帮助类的源码
最近在设计的日志服务中需要用到Mongodb这个Nosql数据库(不知道Mongodb的点我),由于是用于纯存日志,而且日志量巨大,百万千万级的,所以需要用到它的分页查询. 不过LZ也是刚刚接触这个数 ...
- hdu1507
题解: 二分图最大匹配 建边和第一题差不多 每两个相邻的建边 然后输出方案 代码: #include<cstring> #include<cmath> #include< ...
- 如何解决svn Authorization failed错误
出现这种问题肯定是SVN服务器出现了问题,需要修改其三个配置文件: 1.svnserve.conf: [general] anon-access = read auth-access = write ...
- droppable放置组件
Droppable 放置组件 所谓放置,就将一个事物入一个事物内触发各种效果,这个组件不依赖于其他组件.1.加载方式 //class 调用 <div id="dd" clas ...
- Entity Framework技术系列
http://www.cnblogs.com/yilin/tag/Entity%20Framework/
- c# 自定义排序类(冒泡、选择、插入、希尔、快速、归并、堆排序等)
using System; using System.Text; namespace HuaTong.General.Utility { /// <summary> /// 自定义排序类 ...
- TP5 volist
VOLIST标签 volist标签通常用于查询数据集(select方法)的结果输出,通常模型的select方法返回的结果是一个二维数组,可以直接使用volist标签进行输出. 在控制器中首先对模版赋值 ...