bzoj1087

洛谷P1896

想了很久,太久没做状压都已经不会了。。。

状压每一行就好了

 #include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
int n,K,s;
ll an[][][],ans;
bool ok[];
int pcnt[];
#define in(a,b) (((a)&(b))==(a))
vector<int> son[];
int main()
{
int i,j,k,l1,l,t;
scanf("%d%d",&n,&K);s=(<<n)-;
for(i=;i<=s;++i)
ok[i]=!((i&(i<<))|(i&(i>>)));
for(i=;i<=s;++i)
pcnt[i]=__builtin_popcount(i);
for(i=;i<=s;++i)
if(ok[i])
{
t=s&(~(i|(i<<)|(i>>)));
for(j=t;j;j=(j-)&t)
if(ok[j]&&in(i,s&(~(j|(j<<)|(j>>)))))
{
//printf("1t%d %d\n",i,j);
son[i].pb(j);
}
son[i].pb();
}
for(i=;i<=s;++i)
an[][pcnt[i]][i]=;
for(i=;i<=n;++i)
{
for(j=;j<=K;++j)
{
for(k=;k<=s;++k)
if(ok[k]&&pcnt[k]<=j)
{
for(l1=;l1<son[k].size();++l1)
{
l=son[k][l1];
//printf("3t%d %d\n",j-pcnt[k],l);
an[i][j][k]+=an[i-][j-pcnt[k]][l];
}
//printf("2t%d %d %d %lld\n",i,j,k,an[i][j][k]);
}
}
}
for(i=;i<=s;++i)
ans+=an[n][K][i];
printf("%lld",ans);
return ;
}

洛谷P1896||bzoj1087 [SCOI2005]互不侵犯的更多相关文章

  1. 状压DP【洛谷P1896】 [SCOI2005]互不侵犯

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

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

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

  3. 题解【洛谷P1896】[SCOI2005]互不侵犯

    题面 棋盘类状压 DP 经典题. 我们考虑设 \(dp_{i,j,s}\) 表示前 \(i\) 行已经摆了 \(j\) 个国王,且第 \(i\) 行国王摆放的状态为 \(s\) 的合法方案数. 转移的 ...

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

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

  5. [bzoj1087][scoi2005]互不侵犯king

    题目大意 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子. 思路 首先,搜索可以放弃,因为这是一 ...

  6. 状压入门--bzoj1087: [SCOI2005]互不侵犯King【状压dp】

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

  7. 【洛谷P1896【SCOI2005】】互不侵犯King

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

  8. [BZOJ1087][SCOI2005]互不侵犯King解题报告|状压DP

    在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 好像若干月前非常Naive地去写过DFS... ...

  9. bzoj1087 [SCOI2005]互不侵犯

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

随机推荐

  1. 一套完整的前台页面增删改查以及js(easyui)

    增加页面: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEnc ...

  2. linux应用之yum命令详解

    linux yum命令详解 yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能 ...

  3. 提高scroll性能

    在DevTools中开始渲染,向下滑动一点点滚动条,然后停止滚动. 在结果中,注意frames总是在30ftps线上面,甚至都木有很接近69ftps线的(事实上帧执行的太缓慢以致于60ftps线在图上 ...

  4. C#评分小系统练习

    一个经理类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sy ...

  5. hdu-5761 Rower Bo(数学)

    题目链接: Rower Bo Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 131072/131072 K (Java/Others ...

  6. Opencv— — Twirl Filter

    // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...

  7. 「LuoguP1430」 序列取数(区间dp

    题目描述 给定一个长为n的整数序列(n<=1000),由A和B轮流取数(A先取).每个人可从序列的左端或右端取若干个数(至少一个),但不能两端都取.所有数都被取走后,两人分别统计所取数的和作为各 ...

  8. Indexed DB入门导学(1) – 51CTO.COM

    在html 5中,其中一个引人注意的新特性,那就是允许使用Indexed DB.… 查阅全文 ›

  9. OS__信号量(semaphore)PV操作

    信号量的概念 1.信号量的类型定义 信号量(semaphore)的数据结构为记录型数据结构一个值和一个指针,指针指向等待该信号量的下一个进程.信号量的值与相应资源的使用情况有关,在操作系统中,信号量用 ...

  10. Algorithm-4th part I 学习进度 (7/12)

    在cousera跟着书的原作者学习<算法>第四版.记录以下学习进度. 课后习题代码见我的GitHub 2018.09.22 : Priority Queues 使用完全二叉树实现优先队列 ...