题解:

插头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的更多相关文章

  1. URAL1519:Formula 1——题解

    http://acm.timus.ru/problem.aspx?space=1&num=1519 https://vjudge.net/problem/URAL-1519 题目大意:给一个网 ...

  2. URAL1519 Formula 1 【插头dp】

    题目链接 URAL1519 题解 看题型显然插头\(dp\) 考虑如何设计状态 有这样一个方案 当我们决策到某个位置 轮廓线长这样 你会发现插头一定是相互匹配的 所以我们实际上可以把状态用括号序列表示 ...

  3. URAL1519 Formula 1 —— 插头DP

    题目链接:https://vjudge.net/problem/URAL-1519 1519. Formula 1 Time limit: 1.0 secondMemory limit: 64 MB ...

  4. ural1519插头DP

    1519. Formula 1 Time limit: 1.0 second Memory limit: 64 MB Background Regardless of the fact, that V ...

  5. 2019.01.23 ural1519 Formula 1(轮廓线dp)

    传送门 轮廓线dpdpdp模板题. 题意简述:给一个放有障碍的网格图,问有多少种方法能使所有非障碍格子都在同一条哈密顿回路上面. 考虑用括号序列的写法来状压这个轮廓线. 用000表示没有插头,111表 ...

  6. [URAL1519] Formula 1 [插头dp入门]

    题面: 传送门 思路: 插头dp基础教程 先理解一下题意:实际上就是要你求这个棋盘中的哈密顿回路个数,障碍不能走 看到这个数据范围,还有回路处理,就想到使用插头dp来做了 观察一下发现,这道题因为都是 ...

  7. POJ 1739

    楼教主男人八题之一... 题目大意: 求从左下角经过所有非障碍点一次到达右下角的方案数 这里不是求回路,但是我们可以考虑,在最下面一行再增加一行,那么就可以当做求此时左下角到右下角的回路总数,那么就转 ...

  8. HDU 1693 二进制表示的简单插头dp

    题目大意: 找到多条回路覆盖所有非障碍格子,问这样回路的种数 这里的插头与URAL1519 不一样的是 只要管它是否存在即可,只需要1个二进制位表示状态 #include <cstdio> ...

  9. 插头dp的几个模板

    /* ural1519 求经过全部可行点的哈密顿回路的个数 括号匹配法,转移有点复杂,可是时间空间比較小 */ #include<cstdio> #include<cstring&g ...

随机推荐

  1. 学习笔记50—多重假设检验与Bonferroni校正、FDR校正

    总结起来就三句话: (1)当同一个数据集有n次(n>=2)假设检验时,要做多重假设检验校正 (2)对于Bonferroni校正,是将p-value的cutoff除以n做校正,这样差异基因筛选的p ...

  2. Linux 中 MySQL常用命令

    一. 数据库登录mysql -uroot -p二..退出数据库quit 和 exit或ctrl + d三.数据库操作1. 查看所有数据库 show databases;2. 查看当前使用的数据库sel ...

  3. Fiddler 简单介绍

    fiddler 也已经使用了几年了,前面做免登录时就是用了fiddler,为了抓取cookie等信息.但是一直没有对他进行整理出一篇文章来介绍其使用. Fiddler的基本介绍 Fiddler的官方网 ...

  4. 学了vue和webpack的笔记

    首先把package.json贴出来,这里很多插件存在版本区别,因此要特别注意版本,不是所有的安装最新的都行 { "name": "life_manager", ...

  5. 雷林鹏分享:XML 实例

    XML 实例 这些例子演示了 XML 文件.XML 格式化和 XML 转换(XSLT). 还演示了与 XML 一起使用的 JavaScript(AJAX). 查看 XML 文件 查看一个简单的 XML ...

  6. C# 编写WCF简单的服务端与客户端

    http://www.wxzzz.com/1860.html Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Win ...

  7. PCM数据格式

    PCM数据格式          1. 音频简介 经常见到这样的描述: 44100HZ 16bit stereo 或者 22050HZ 8bit mono 等等. 44100HZ 16bit ster ...

  8. 以太坊 web3.js 文档翻译及说明

    这些天,为了录制以太坊DAPP开发实战课程,我准备把web3文档全部翻译一下(并做适当的补充),目前web3.js 0.20.x 版本 已经翻译完成,欢迎大家前往查阅. 这里还几个实用DEMO,供大家 ...

  9. ASP.Net MVC多语言

    .NET MVC 多语言网站 通过浏览器语言首选项改变MVC的语言,通过浏览器语言选项,修改脚本语言. 一.添加资源文件 1.添加App_GlobalResources文件夹. 2.添加默认的资源文件 ...

  10. android--------自定义控件 之 组合控件篇

    上篇介绍了自定义控件的自定义属性篇,地址:http://www.cnblogs.com/zhangqie/p/8969163.html 这篇博文主要来说说 自定义控件的组合控件来提高布局的复用 使用自 ...