hdu1693插头dp(多回路)
题意:在n*m的矩阵中,有些格子有树,没有树的格子不能到达,找一条或多条回路,吃全然部的树,求有多少中方法。
这题是插头dp,刚刚学习,不是非常熟悉,研究了好几天才明确插头dp的方法,他们老是讲一些什么轮廓线啊,插头啊什么的,刚開始全然不知道这些事干什么的,看完cdq的大作后也是一头的雾水,看代码,绘图,一步一步的推,最终明确了,那个是为什么,这里讲一讲。
轮廓线表示的是当前插头的状态,这题中状态中1表示有插头,0表示无插头,假设是横线的话就是上面的格子与以下的格子相连的状态,这题中显然一个格子中要码有两个插头(经过这个格子),要码没有插头(不经过这个格子),由于不可能分叉走,每一个格子走一次。

这个状态表示(101111),当前决策格子是第二行第三个格子,显然它已经有了两个插头,也就是有1条线穿过它,所以不用再加插头了。


这个状态是(100111)和(101011),当前决策格子是第二行第三个格子,显然有一个插头了,再加入一个就可以,那么就有两个选择,要码向下,要码向右,就要有两个转移。

这个状态是(100011),当前决策格子是第二行第三个格子,显然之前没有有一个插头了,仅仅能加入两个,或者不加入,不加入,就肯定不经过这个格子,显然仅仅能这个格子是不可行的。
你自己推理一下,为什么要从i,j-1个格子中状态转移过来和上一层的状态转移到下层,你会发现轮廓线的美妙。
自己用笔画画吧,好记性不如烂笔头。
我參考的代码是 http://hi.baidu.com/fqq11679/blog/item/423bcd4a3d956bf983025c6d.html
只是状态转移上有点差别,他是当前状态转到后来状态,我是当前状态从前面转来。
//hdu1693 by huicpc0207
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
const int N=13;
const int M=(1<<N);
typedef long long LL;
LL dp[N][N][M];
int n,m,g[N][N],cas;
void read()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&g[i][j]);
}
void solve()
{
read();
memset(dp,0,sizeof dp);
dp[0][m][0]=1;
for(int i=1;i<=n;i++)
{
for(int k=0;k<(1<<m);++k)
dp[i][0][k<<1]=dp[i-1][m][k];
for(int j=1;j<=m;j++)
for(int k=0;k<(1<<m+1);k++)
{
int x=1<<j-1;
int y=1<<j;
if(g[i][j]==0)
{
if((k&x)==0&&(k&y)==0) dp[i][j][k]=dp[i][j-1][k];
else dp[i][j][k]=0;
}
else{
if((k&x)!=0&&(k&y)!=0)
dp[i][j][k]=dp[i][j-1][k^x^y];
else if((k&x)==0&&(k&y)==0)
dp[i][j][k]=dp[i][j-1][k^x^y];
else
dp[i][j][k]=dp[i][j-1][k]+dp[i][j-1][k^x^y];
}
// printf()
}
}
printf("Case %d: There are %I64d ways to eat the trees.\n",++cas,dp[n][m][0]);
}
int main()
{
// freopen("1.in","r",stdin);
int t; cas=0;
scanf("%d",&t);
while(t--) solve();
return 0;
}
hdu1693插头dp(多回路)的更多相关文章
- hdu1693 插头dp
题意:给了一个矩阵图,要求使用回路把图中的树全部吃掉的方案树,没有树的点不能走,吃完了这个点也就没有了,走到哪吃到哪 用插头dp搞 #include <iostream> #include ...
- HDU 4285 circuits( 插头dp , k回路 )
circuits Time Limit: 30000/15000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Ural 1519 Formula 1 插头DP
这是一道经典的插头DP单回路模板题. 用最小表示法来记录连通性,由于二进制的速度,考虑使用8进制. 1.当同时存在左.上插头的时候,需要判断两插头所在连通块是否相同,若相同,只能在最后一个非障碍点相连 ...
- [入门向选讲] 插头DP:从零概念到入门 (例题:HDU1693 COGS1283 BZOJ2310 BZOJ2331)
转载请注明原文地址:http://www.cnblogs.com/LadyLex/p/7326874.html 最近搞了一下插头DP的基础知识……这真的是一种很锻炼人的题型…… 每一道题的状态都不一样 ...
- HDU1693 Eat the Trees 插头dp
原文链接http://www.cnblogs.com/zhouzhendong/p/8433484.html 题目传送门 - HDU1693 题意概括 多回路经过所有格子的方案数. 做法 最基础的插头 ...
- hdu1693 Eat the Trees 【插头dp】
题目链接 hdu1693 题解 插头\(dp\) 特点:范围小,网格图,连通性 轮廓线:已决策点和未决策点的分界线 插头:存在于网格之间,表示着网格建的信息,此题中表示两个网格间是否连边 状态表示:当 ...
- HDU1693 Eat the Trees —— 插头DP
题目链接:https://vjudge.net/problem/HDU-1693 Eat the Trees Time Limit: 4000/2000 MS (Java/Others) Mem ...
- hdu1693:eat trees(插头dp)
题目大意: 题目背景竟然是dota!屠夫打到大后期就没用了,,只能去吃树! 给一个n*m的地图,有些格子是不可到达的,要把所有可到达的格子的树都吃完,并且要走回路,求方案数 题解: 这题大概是最简单的 ...
- 【HDU1693】Eat the Trees(插头dp)
[HDU1693]Eat the Trees(插头dp) 题面 HDU Vjudge 大概就是网格图上有些点不能走,现在要找到若干条不相交的哈密顿回路使得所有格子都恰好被走过一遍. 题解 这题的弱化版 ...
随机推荐
- JDBC 专题
digest: getFetchSize()方法不是获得记录数,而是获得每次抓取的记录数,默认是0,也就是说不限制.可以用setFetchSize()来设置,而getFetchSize()是用来读出那 ...
- Redo 非current损坏
Redo log 文件损坏或丢失,在启动数据库时在alert日志中会有如下错误: ORA-00313: open failed for members of log group 1 of thread ...
- oled stm32的spi
其实各种协议是很重要的,这篇文章就当做我对spi协议的一个整理吧. 必要的spi简介: https://www.cnblogs.com/zengsf/p/7221207.html?utm_source ...
- Altium Designer如何统一改变pcb状态下的原件标号位置
原创 我用的是Altium Designer16版本 变成 步骤如下: 选中标号 右击 下边一步很重要: 点击应用和确定 在之后弹出的对话框中选则你要改变的位置,我这里是把标号改变到原件的右侧: 等待 ...
- PythonNET网络编程1
# PythonNET 网络编程 ISO(国际标准化组织) 制定了 OSI(Open System Interconnectio),意为开放式系统互联.国际标准化组织(ISO)制定了OSI模型,该模型 ...
- php实现 查找输入整数二进制中1的个数
php实现 查找输入整数二进制中1的个数 一.总结 一句话总结: 1.if($j&intval($num)){}的作用是什么? 1 <?php 2 while($num=trim(fge ...
- Vue实现上传图片功能
前言: 用vue实现上传图片功能,效果图如下: 先说文件上传控件样式美化怎么做,我有两种方法. 1.先上代码 html部分: <div class="pics-wrapper" ...
- 10.4 android输入系统_框架、编写一个万能模拟输入驱动程序、reader/dispatcher线程启动过程源码分析
1. 输入系统框架 android输入系统官方文档 // 需FQhttp://source.android.com/devices/input/index.html <深入理解Android 卷 ...
- IOS使用AsyncSocket进行Socket通信
首先导入CFNetwork.framework框架 1.下载ASyncSocket库源码 2.把ASyncSocket库源码加入项目 3.在项目增加CFNetwork框架 使用AsyncSocket开 ...
- ZOJ 3168 Sort ZOJ7 水
再水一发,舍友肿么还在睡T T. ---------------------------------舍友还在睡觉的分割线--------------------------------- http:/ ...