题意

有一个六边形格子,共 \(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. sql语句-2-字符串数字日期时间

  2. POJ2513_Colored Sticks_KEY

    题目传送门 题目大意:给你若干根木棍,每根木棍有前后两种颜色,连接两根木棍需要前后颜色相同,求能否将所有木棍连接在一起. Solution: 不要将木棍看成点,将颜色看成点. 其实就是求是否存在欧拉路 ...

  3. Hibernate5使用注解方式(转)

    用Hibernate5使用映射文件时存在一个问题没有解决,在映射文件中配置了student_sequence,但找不到映射文件自增长的序列的sequence(Oracle)数据库. 输出的是 Hibe ...

  4. javaweb(三十八)——事务

    一.事务的概念 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 例如:A——B转帐,对应于如下两条sql语句  update from account set mone ...

  5. EOJ3650 转机折扣(26进制,字符串)

    题面 看成26进制,把较小的那个字符串加1 strcmp(s1,s2)s1和s2有大小时,不一定都是返回1或者-1.....这个地方wa了好几次没有发现 #include<bits/stdc++ ...

  6. 中国天气网 城市代码 sql语句

    mysql的 下载地址:http://download.csdn.net/detail/songzhengdong82/6252651

  7. 网络流dinic模板,邻接矩阵+链式前向星

    //这个是邻接矩阵的#include<iostream> #include<queue> #include<string.h> #include<stdio. ...

  8. 高可用Kubernetes集群-5. 部署flannel网络

    七.部署flannel网络 kubernetes支持基于vxlan方式的flannel与weave网络,基于BGP路由的Calico网络,本节采用flannel网络. Flannel网络采用etcd等 ...

  9. 【Python入门总结】

    用了两周时间将python的基本语法和模块过了一遍,alex的视频也简单看了下;并且在项目中直接上了python解析语义的实现,初步感觉到了python语言的魅力.下一步,会按照廖雪峰的python学 ...

  10. KETTLE监控

    kettle单实例环境下自身没有监控工具,但在集群下自带了监控工具. 一.集群自带的监控 kettle自带的集群监控工具可以监控转换的执行情况. 配置好集群后,打开浏览器:输入http://local ...