树(tree)
树(tree)
题目描述
小明正在研究一种砍树游戏。一开始在W列H行的方格上,每一个格子都长着一颗树,格子的行从北到南依次编号,格子的列从西到东依次编号。
小明会砍倒一些树,每砍倒一颗树,树会占据这个格子和它倒向方向的相邻格子。例如:格子(r,c)的树向南倒下,则占据(r,c)和(r+1,c)两个格子。
砍树游戏的规则是:
*树只能向南或向东2个方向倒。
*树不能倒向方格外面。例如最后一列的树不能向东倒。
*不能有2颗砍倒的树占据同一个格子。
在每颗树上写有一个字母:S或E,分别表示南和东,小明砍树时会优先考虑这个方向。例如:小明碰到树上字母是 S 时,会首先看能不能向南砍倒树。
游戏中小明将从第 1 行开始,从左到右依次走到每一格;再第 2 行开始,从左到右依次砍树;…,直到最后一行。在每一格按照下面的算法砍树:
1、判断这格是否有砍倒的树占据?如果是,不砍树,走到下一格去。
2、判断是否可以按照树上字母的方向砍倒树?如果是,朝这个方向砍倒树,走到下一格去。
3、判断是否可以朝另外一个方向砍倒树?如果是,朝这个方向砍倒树,走到下一格去。
4、直接走到下一格去。
例如:一个 4*3 的局面
SEEE
ESSS
EESS
可砍倒 5 颗树,用 1,2,3,4,5 表示依次砍倒的树,形状如下:
1223
1453
_45_
现在给定 W 和 H,由于每个格子可以是 S 或 E,因此有 2^(W*H)种可能的开始局面。计算如果你玩遍所有的 2^(W*H)种开始局面,总共可以砍倒多少颗树?答案可能太大,输出模M的值。
solution
发现w只有7,似乎很像状压
那我们就压起来
令f[i][S][j]表示我砍了前i行树,第i行的树被砍的状态为S,一共砍了j棵树的贴字母的方案数
其中状态S为0表示横着砍或不砍(不影响下一行)
为1表示向下砍(影响下一行)
我们用主动转移,这样不用跑满。
转移比较麻烦
//S 状态 c数量 别问我为什么叫这个,我乱取的
if(x.S&(1<<k-1))dfs(k+1,x,now,way*2);
//这一格已经被占住了,那么这一位不论贴什么都不行,直接把方案*2,状态不改
else {// 可以砍树,且一定砍
now.c++;int fl=1;
if(k<w){
if(!(x.S&(1<<k)))dfs(k+2,x,now,way*2);// 下一个位置没有被占
else fl=2;//不管贴什么都要往下砍,方案*2
}
now.S|=(1<<k-1);// 往下砍
if(k<w)dfs(k+1,x,now,way*fl);//不是最后一个
else dfs(k+1,x,now,way*2);// 最后一个
}
树(tree)的更多相关文章
- 树(tree)
树(tree)[题目描述]从前在森林里面有一棵很大的树,树上住着很多小动物.树上有
- JS--插件: 树Tree 开发与实现
日常在Web项目开发时,经常会碰到树形架构数据的显示,从数据库中获取数据,并且显示成树形.为了方便,我们可以写一个javascript的一个跨浏览器树控件,后续可以重复使用.本节分享一个自己开发的JS ...
- 轻量级jquery框架之--树(tree)
前言 在常用的UI组件中,树形组件与数据列表组件可以说是构成一个管理平台基本的两大数据核心组件.树形组件用于系统菜单,数据列表用于数据表现,两者配合即可完成一个简单的数据系统.要实现一个支持复选.工具 ...
- layui实现checkbox的目录树tree
layui.use([ 'tree' ], function() {$ = layui.jquery;form = layui.form;//获取节点数据getTreeData();}); funct ...
- 数据结构(二) 树Tree
五.树 树的定义 树的逻辑表示:树形表示法.文氏图表示法.凹入表示法.括号表示法. 结点:表示树中的元素,包括数据项及若干指向其子树的分支. 结点的度:结点拥有的子树树:树的度:一 ...
- Python与数据结构[3] -> 树/Tree[2] -> AVL 平衡树和树旋转的 Python 实现
AVL 平衡树和树旋转 目录 AVL平衡二叉树 树旋转 代码实现 1 AVL平衡二叉树 AVL(Adelson-Velskii & Landis)树是一种带有平衡条件的二叉树,一棵AVL树其实 ...
- Python与数据结构[3] -> 树/Tree[1] -> 表达式树和查找树的 Python 实现
表达式树和查找树的 Python 实现 目录 二叉表达式树 二叉查找树 1 二叉表达式树 表达式树是二叉树的一种应用,其树叶是常数或变量,而节点为操作符,构建表达式树的过程与后缀表达式的计算类似,只不 ...
- Python与数据结构[3] -> 树/Tree[0] -> 二叉树及遍历二叉树的 Python 实现
二叉树 / Binary Tree 二叉树是树结构的一种,但二叉树的每一个节点都最多只能有两个子节点. Binary Tree: 00 |_____ | | 00 00 |__ |__ | | | | ...
- 如何使用 JSP JSTL 显示/制作树(tree) 菜单
JSTL里面并没有直接制作tree菜单的元素,因此递归是JSP JSTL显示/制作tree菜单的唯一方法. 以下详述如何制作tree菜单. 首先,在主页面里面增加包含制作树菜单的jsp,例如: 在my ...
- easyUI的下拉框combobox与树tree联动
参与联动的有 2 个combobox 和 1 个tree: <input id="combobox1" class="easyui-combobox" n ...
随机推荐
- bootloader 关闭看门狗
#define pWTCON 0x53000000disable_watchdog: ldr r0, =pWTCON mov r1, #0x0 str r1, [r0]
- JAVA / MySql 编程——第八章 DAO 模式
1. 数据持久化:将程序中的数据在瞬时状态和持久状态间转换的机制即为数据持久化: 2. 持久化的实现方式:数据库.普通文件.XML文件: 3. JDBC封装: ...
- 死锁-Java代码示例
class MyThread implements Runnable{ private Object o1 = new Object(); private Object o2 = new Object ...
- POJ:3268-Silver Cow Party
Silver Cow Party Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 26184 Accepted: 11963 De ...
- Android面试收集录12 View测量、布局及绘制原理
一.View绘制的流程框架 View的绘制是从上往下一层层迭代下来的.DecorView-->ViewGroup(--->ViewGroup)-->View ,按照这个流程从上往下, ...
- TouTiao开源项目 分析笔记8 图解分析数据加载方式
1.整体构架 1.1.以一个段子页面为例,列出用到的主要的类,以图片的方式展示. 1.2.基础类 这里最基础的接口有: IBaseView<T>==>定义了5个方法. 然后最基础 ...
- hover 改变另一个标签的属性
- linux 多播
1.概念 单播是用于两个主机之间传送数据,广播是一个主机对局域网内的所有主机发送数据.而多播,又称为组播,它是对一组特定的主机通信.将网络上同一类型 业务逻辑上分组,只和组内的成员通信,其它主机没有加 ...
- QQ空间相册展示特效
<!doctype html> <html lang="en"> <head> <title>QQ空间相册展示特效<title ...
- HUAWEI TAG-AL00 找IMEI的过程
前几天,遇到一台华为机型,IMEI获取有问题,然后就找了一下. 以下是解决过程,权当记录一下,尽管为知笔记已经有备份了 :) 0x01: 起因 测试小哥发现,一台机型IMEI获取不全,有问题,拨号页面 ...