题意

有一个六边形格子,共 \(n\) 行,每行有 8 个位置,有一些格子不能走。求用一些环覆盖所有可走格子的方案数。\(n\le 10\) 。

分析

插头dp,只不过是六边形上的,分奇数列和偶数列讨论,转移不太一样,但大同小异。编号需要插空,注意以下就行了。复杂度为 \(O(nm2^{2m})\) 。

代码

cc_hash_table 多次用实力证明,他跑得比其他任何内置的 hash_map 都快!

#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/hash_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef long long giant;
typedef cc_hash_table<int,giant> Map;
typedef Map::iterator itt;
const int maxn=11;
const int m=8,maxm=m+1;
int n,q;
bool no[maxn][maxm];
Map f,g;
inline int get(int x,int p) {return (x>>p)&1;}
inline int mod(int x,int p,int d) {return (x&(~(1<<p)))+(d<<p);}
inline int mor(int x,int p,int d) {
int bef=x&((1<<p)-1);
return ((x-bef)<<d)+bef;
}
inline int mol(int x,int p,int d) { // cover the pth
int bef=x&((1<<p)-1);
return (((x-bef)>>(p+2))<<p)+bef;
}
int work() {
memset(no,0,sizeof no);
while (q--) {
static char s[5];
scanf("%s",s);
no[s[0]-'A'+1][s[1]-'A'+1]=true;
}
f.clear(),g.clear();
f[0]=1;
for (int i=1;i<=n;++i) {
f.swap(g),f.clear();
for (itt it=g.begin();it!=g.end();++it) {
const int &d=it->first;
const giant &w=it->second;
if (get(d,1)==0 && get(d,17)==0) f[d]=w;
}
for (int j=1;j<=m;++j) {
f.swap(g),f.clear();
for (itt it=g.begin();it!=g.end();++it) {
const int &d=it->first;
const giant &w=it->second;
if (j&1) {
int a=j*2-1,t=mor(d,a+2,2),x=get(d,a),y=get(d,a+1),sum=x+y;
if (no[i][j]) {
if (!sum) f[t]+=w;
continue;
}
if (!sum) {
for (int k=0;k<4;++k) for (int r=k+1;r<4;++r) f[mod(mod(t,a+k,1),a+r,1)]+=w;
} else {
int v=mod(mod(t,a,0),a+1,0);
if (sum==1) for (int k=0;k<4;++k) f[mod(v,a+k,1)]+=w; else
if (sum==2) f[v]+=w;
}
} else {
int a=j<<1,t=mol(d,a+2,2),u=get(d,a),x=get(d,a+1),y=get(d,a+2),z=get(d,a+3),sum=u+x+y+z;
if (no[i][j]) {
if (!sum) f[t]+=w;
continue;
}
if (!sum) f[mod(mod(t,a,1),a+1,1)]+=w; else {
int v=mod(mod(t,a,0),a+1,0);
if (sum==1) for (int k=0;k<2;++k) f[mod(v,a+k,1)]+=w; else
if (sum==2) f[v]+=w;
}
}
}
}
}
printf("%lld\n",f[0]);
}
int main() {
#ifndef ONLINE_JUDGE
freopen("test.in","r",stdin);
#endif
while (~scanf("%d%d",&n,&q)) work();
return 0;
}

ZOJ3466-The Hive II的更多相关文章

  1. hive(II)--sql考查的高频问题

    在了解别人hive能力水平的时候,不管是别人问我还是我了解别人,有一些都是必然会问的东西.问的问题也大都大同小异.这里总结一下我遇到的那些hive方面面试可能涉及的问题 1.行转列(列转行) 当我们建 ...

  2. ZOj 3466 The Hive II

    There is a hive in the village. Like this. There are 8 columns(from A to H) in this hive. Different ...

  3. ZOJ 3466 The Hive II (插头DP,变形)

    题意:有一个n*8的蜂房(6边形的格子),其中部分是障碍格子,其他是有蜂蜜的格子,每次必须走1个圈取走其中的蜂蜜,在每个格子只走1次,且所有蜂蜜必须取走,有多少种取法? 思路: 以前涉及的只是n*m的 ...

  4. 插头DP专题

    建议入门的人先看cd琦的<基于连通性状态压缩的动态规划问题>.事半功倍. 插头DP其实是比较久以前听说的一个东西,当初是水了几道水题,最近打算温习一下,顺便看下能否入门之类. 插头DP建议 ...

  5. DP:0

    小故事: A * "1+1+1+1+1+1+1+1 =?" * A : "上面等式的值是多少" B : *计算* "8!" A *在上面等式 ...

  6. hive的Query和Insert,Group by,Aggregations(聚合)操作

    1.Query (1)分区查询 在查询的过程中,采用那个分区来查询是通过系统自动的决定,但是必须是在分区列上基于where子查询. SELECT page_views.* FROM page_view ...

  7. 2 hive的使用 + hive的常用语法

    本博文的主要内容有: .hive的常用语法 .内部表 .外部表 .内部表,被drop掉,会发生什么? .外部表,被drop掉,会发生什么? .内部表和外部表的,保存的路径在哪? .用于创建一些临时表存 ...

  8. hadoop生态圈安装详解(hadoop+zookeeper+hbase+pig+hive)

    -------------------------------------------------------------------* 目录 * I   hadoop分布式安装   * II zoo ...

  9. 深入浅出Hive企业级架构优化、Hive Sql优化、压缩和分布式缓存(企业Hadoop应用核心产品)

    一.本课程是怎么样的一门课程(全面介绍)    1.1.课程的背景       作为企业Hadoop应用的核心产品,Hive承载着FaceBook.淘宝等大佬 95%以上的离线统计,很多企业里的离线统 ...

随机推荐

  1. 20155321 2016-2017-2 《Java程序设计》第四周学习总结

    20155321 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 第六.七章 继承 多态 接口 相应的语法细节 继承 关键字 extends 格式 class ...

  2. 考研编程练习----m叉树先序和后序所包含的情况

    题目描述: We are all familiar with pre-order, in-order and post-order traversals of binary trees. A comm ...

  3. c#获取已安装的所有NET版本

    /// <summary> /// 获取已安装的所有NET版本 /// </summary> /// <returns></returns> publi ...

  4. RHCE模拟考试

    真实考试环境说明: 你考试所用的真实物理机器会使用普通账号自动登陆,登陆后,桌面会有两个虚拟主机图标,分别是system1和system2.所有的考试操作都是在system1和system2上完成.S ...

  5. iOS 的音频播放

    一.Audio Toolbox 1.使用代码 #import <AudioToolbox/AudioToolbox.h> AudioServicesPlaySystemSound(1106 ...

  6. 【mysql优化】mysql count(*)、count(1)、count(主键字段)、count(非主键字段)哪个性能最佳

    测试结果为:count(*)和count(1)基本相等,count(非主键字段)最耗性能 -- 数据量 708254select count(*) from tmp_test1;-- avg 0.22 ...

  7. Jmeter资源监控工具ServerAgent运行原理的一些研究

    用过Jmeter的应该都了解,有个ServerAgent工具,放在linux或者windows服务器上开启服务后,在Jmeter中配置下监视器,就可以抓取到服务器的一些资源信息,抓取的主要是cpu.内 ...

  8. loadrunner12安装教程

    全套五个文件: 独立安装包,插件包,LR安装包,语言包,版本说明书 loadrunner 12安装教程 1.首先下载Loadrunner12安装包.下载下来将会有四个安装包. HP_LoadRunne ...

  9. 拉格朗日乘子法与KKT条件 && SVM中为什么要用对偶问题

    参考链接: 拉格朗日乘子法和KKT条件 SVM为什么要从原始问题变为对偶问题来求解 为什么要用对偶问题 写在SVM之前——凸优化与对偶问题 1. 拉格朗日乘子法与KKT条件 2. SVM 为什么要从原 ...

  10. 深入react技术栈解读

    1. react实现virtual DOM ,如果要改变页面的内容,还是需要执行DOM操作,比原生操作DOM多了virtualDOM的操作(计算,对比等), 应该是更耗性能??? 2. react特点 ...