树(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 ...
随机推荐
- java通过FreeMarker模板生成Excel文件之.ftl模板制作
关于怎么通过freemarker模板生成excel的文章很多,关键点在于怎么制作模板文件.ftl 网上的办法是: (1)把Excel模板的格式调好,另存为xml文件 (2)新建一个.ftl文件,把xm ...
- TCPIP协议编程:基于UDP协议的局域网聊天工具的研发
任务目标 聊天器采用客户端/服务器(C/S)模式: 客户端利用UDP与服务器相连,客户端与客户端之间通过UDP相互通信: 服务器端具有服务器端口设置维护客户端个人信息,记录客户端状态,分配账号等: 客 ...
- java @override 全部报错
问.java @override 全部报错 答: 错误:在 eclipse 的新工作空间开发项目时,出现大面积方法编译错误.鼠标放在方法名上后显示让我们去掉 @override 注解 原因: @Ove ...
- 课时16.HTML-XHTML-HTML5区别(了解)
简而言之 HTML语法非常宽松容错性强: XHTML更为严格,它要求标签必须小写,必须严格闭合,标签中的属性必须使用引号引起等等. HTML5是HTML的下一个版本所以除了非常宽松容错性强以外,还增加 ...
- 标签种类及CSS引入方法
标签种类及CSS引入方法 标签种类: 一:块级标签(block) ——> 独占一行,默认宽度与内容无关,宽高可设 (hr 块级标签) 二:行内块标签(inline-block) ——> ...
- source insight插件
直使用sourceinsight编辑C/C++代码,sourceinsight是一个非常好用的编辑工具可以任意定位,跳转,回退,本人一直 使用该工具做C/C++开发,sourceinsight能够满足 ...
- HyperLedger Fabric 1.4 比特币历史(1.1)
比特币是一种数字货币,也是一种创新思维,把人们带入到一个无中心化.完全可信任.安全可靠的全新思维领域:一个叫“中本聪”的人或组织,使我们思维产生化学反应,他在2008年10月31日发表了比特币白皮书& ...
- 笔记-python-standard library-26.4 unittest
笔记-python-standard library-26.4 unittest 1. unittest source code:Lib/unittest/__init__.py 它是pyt ...
- ST-LINK JLINK JTAG SWD接线图
- OpenCV学习笔记(十一) 轮廓操作
在图像中寻找轮廓 首先利用Canny算子检测图像的边缘,再利用Canny算子的输出作为 寻找轮廓函数 findContours 的输入.最后用函数 drawContours 画出轮廓.边界Counto ...