ural1519
题解:
插头dp
具体可以看看cdq论文
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=;
int n,m,ex,ey;
char s[][];
struct node
{
int H[N],tot,st[N];
ll s[N];
void init()
{
memset(H,,sizeof(H));
tot=;
}
void add(int S,ll v)
{
int i=S%N;
for (;H[i]>=&&st[H[i]]!=S;i=(i+)%N);
if (H[i]<)
{
st[tot]=S;
s[tot]=v;
H[i]=tot++;
}
else s[H[i]]+=v;
}
}f[];
int Get(int x,int y)
{
return (x>>(y<<))&;
}
int Set(int &z,int x,int y)
{
z^=Get(z,x)<<(x<<);
z^=y<<(x<<);
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<n;i++)
{
scanf("%s",s[i]);
for (int j=;j<m;j++)
if (s[i][j]=='.')
{
ex=i;
ey=j;
}
}
int p=,q=;
f[p].s[]=; f[p].tot=;
for (int i=;i<n;i++)
{
for (int j=;j<m;j++,p^=,q^=)
{
f[q].init();
if (s[i][j]=='*')
{
for (int k=;k<f[p].tot;k++)
{
int st=f[p].st[k];
ll s=f[p].s[k];
if (!Get(st,j)&&!Get(st,j+))f[q].add(st,s);
}
continue;
}
for (int k=;k<f[p].tot;k++)
{
int st=f[p].st[k],x=Get(st,j),y=Get(st,j+);
ll s=f[p].s[k];
if (!x)
{
if (!y)
{
if (j==m-) continue;
Set(st,j,); Set(st,j+,);
f[q].add(st,s);
}
else
{
if (j<m-) f[q].add(st,s);
Set(st,j+,); Set(st,j,y);
f[q].add(st,s);
}
}
else if (!y)
{
f[q].add(st,s);
if (j==m-) continue;
Set(st,j,); Set(st,j+,x);
f[q].add(st,s);
}
else
{
Set(st,j,); Set(st,j+,);
if (x==)
{
if (y==)
{
for (int k=j+,t=;;k++)
{
if (Get(st,k)==) t++;
else if (Get(st,k)==)
{
t--;
if (!t)
{
Set(st,k,);
f[q].add(st,s);
break;
}
}
}
}
else if (i==ex && j==ey) f[q].add(st,s);
}
else
{
if (y==) f[q].add(st,s);else
{
for (int k=j-,t=;;k--)
{
if (Get(st,k)==) t++;
else if (Get(st,k)==)
{
t--;
if (!t)
{
Set(st,k,);
f[q].add(st,s);
break;
}
}
}
}
}
}
}
}
for (int j=;j<f[p].tot;j++) f[p].st[j]<<=;
}
for (int i=;i<f[p].tot;i++)
if (f[p].st[i]==)
{
printf("%lld\n",f[p].s[i]);
return ;
}
puts("");
return ;
}
ural1519的更多相关文章
- URAL1519:Formula 1——题解
http://acm.timus.ru/problem.aspx?space=1&num=1519 https://vjudge.net/problem/URAL-1519 题目大意:给一个网 ...
- URAL1519 Formula 1 【插头dp】
题目链接 URAL1519 题解 看题型显然插头\(dp\) 考虑如何设计状态 有这样一个方案 当我们决策到某个位置 轮廓线长这样 你会发现插头一定是相互匹配的 所以我们实际上可以把状态用括号序列表示 ...
- URAL1519 Formula 1 —— 插头DP
题目链接:https://vjudge.net/problem/URAL-1519 1519. Formula 1 Time limit: 1.0 secondMemory limit: 64 MB ...
- ural1519插头DP
1519. Formula 1 Time limit: 1.0 second Memory limit: 64 MB Background Regardless of the fact, that V ...
- 2019.01.23 ural1519 Formula 1(轮廓线dp)
传送门 轮廓线dpdpdp模板题. 题意简述:给一个放有障碍的网格图,问有多少种方法能使所有非障碍格子都在同一条哈密顿回路上面. 考虑用括号序列的写法来状压这个轮廓线. 用000表示没有插头,111表 ...
- [URAL1519] Formula 1 [插头dp入门]
题面: 传送门 思路: 插头dp基础教程 先理解一下题意:实际上就是要你求这个棋盘中的哈密顿回路个数,障碍不能走 看到这个数据范围,还有回路处理,就想到使用插头dp来做了 观察一下发现,这道题因为都是 ...
- POJ 1739
楼教主男人八题之一... 题目大意: 求从左下角经过所有非障碍点一次到达右下角的方案数 这里不是求回路,但是我们可以考虑,在最下面一行再增加一行,那么就可以当做求此时左下角到右下角的回路总数,那么就转 ...
- HDU 1693 二进制表示的简单插头dp
题目大意: 找到多条回路覆盖所有非障碍格子,问这样回路的种数 这里的插头与URAL1519 不一样的是 只要管它是否存在即可,只需要1个二进制位表示状态 #include <cstdio> ...
- 插头dp的几个模板
/* ural1519 求经过全部可行点的哈密顿回路的个数 括号匹配法,转移有点复杂,可是时间空间比較小 */ #include<cstdio> #include<cstring&g ...
随机推荐
- POJ-2955 Brackets(括号匹配问题)
题目链接:http://poj.org/problem?id=2955 这题要求求出一段括号序列的最大括号匹配数量 规则如下: the empty sequence is a regular brac ...
- vi常用快捷键
vi常用快捷键 1)移动光标 h :光标左移一个字符k :光标上移一个字符j :光标下移一个字符l :光标右移一个字符 0 :光标移至行首$ :光标移至行尾 H :光标移至屏幕首行M :光标移至屏幕中 ...
- CentOS6.8环境下搭建yum网络仓库
CentOS6.8环境下搭建yum网络仓库 本文利用ftp服务,在CentOS6.8系统下搭建一个yum仓库,然后用另一台虚拟机访问该仓库.并安装程序包 安装ftp服务 查询ftp服务是否安装 [ro ...
- 『TensorFlow』第七弹_保存&载入会话_霸王回马
首更: 由于TensorFlow的奇怪形式,所以载入保存的是sess,把会话中当前激活的变量保存下来,所以必须保证(其他网络也要求这个)保存网络和载入网络的结构一致,且变量名称必须一致,这是caffe ...
- Educational Codeforces Round 2 E - Lomsat gelral
题意:每个节点有个值,求每个节点子树众数和 题解:可线段树合并,维护每个数出现次数和最大出现次数,以及最大出现次数的数的和 //#pragma GCC optimize(2) //#pragma GC ...
- ACM基础(一)
比较大的数组应尽量声明在main函数外,否则程序可能无法运行. C语言的数组并不是“一等公民”,而是“受歧视”的.例如,数组不能够进行赋值操作: 在程序3-1中,如果声明的是“int a[maxn], ...
- Ping 的TTL理解
http://www.webkaka.com/tutorial/zhanzhang/2017/061570/ 根据自己的扩展重新整理了一下,虽然不是运维,想了解一点东西就希望了解清楚. 一.含义 “T ...
- Redis+Twemproxy+HAProxy集群(转) 干货
原文地址:Redis+Twemproxy+HAProxy集群 干货 Redis主从模式 Redis数据库与传统数据库属于并行关系,也就是说传统的关系型数据库保存的是结构化数据,而Redis保存的是一 ...
- [转载]Python正则表达式匹配反斜杠'\'问题
转载自csdnblog:Python正则表达式匹配反斜杠'\'问题 在学习Python正则式的过程中,有一个问题一直困扰我,如何去匹配一个反斜杠(即“\”)? 一.引入 在学习了Python特殊字符和 ...
- const 内联 枚举 宏
const 常量 程序运行时在常量表中,系统为它分配内存,在堆栈分配了空间:const常量有数据类型:语句末有分号:有类型检查:可以限制范围 //将所有不希望改变的变量加const修饰 const ...