树(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)的更多相关文章

  1. 树(tree)

    树(tree)[题目描述]从前在森林里面有一棵很大的树,树上住着很多小动物.树上有

  2. JS--插件: 树Tree 开发与实现

    日常在Web项目开发时,经常会碰到树形架构数据的显示,从数据库中获取数据,并且显示成树形.为了方便,我们可以写一个javascript的一个跨浏览器树控件,后续可以重复使用.本节分享一个自己开发的JS ...

  3. 轻量级jquery框架之--树(tree)

    前言 在常用的UI组件中,树形组件与数据列表组件可以说是构成一个管理平台基本的两大数据核心组件.树形组件用于系统菜单,数据列表用于数据表现,两者配合即可完成一个简单的数据系统.要实现一个支持复选.工具 ...

  4. layui实现checkbox的目录树tree

    layui.use([ 'tree' ], function() {$ = layui.jquery;form = layui.form;//获取节点数据getTreeData();}); funct ...

  5. 数据结构(二) 树Tree

    五.树 树的定义   树的逻辑表示:树形表示法.文氏图表示法.凹入表示法.括号表示法.         结点:表示树中的元素,包括数据项及若干指向其子树的分支. 结点的度:结点拥有的子树树:树的度:一 ...

  6. Python与数据结构[3] -> 树/Tree[2] -> AVL 平衡树和树旋转的 Python 实现

    AVL 平衡树和树旋转 目录 AVL平衡二叉树 树旋转 代码实现 1 AVL平衡二叉树 AVL(Adelson-Velskii & Landis)树是一种带有平衡条件的二叉树,一棵AVL树其实 ...

  7. Python与数据结构[3] -> 树/Tree[1] -> 表达式树和查找树的 Python 实现

    表达式树和查找树的 Python 实现 目录 二叉表达式树 二叉查找树 1 二叉表达式树 表达式树是二叉树的一种应用,其树叶是常数或变量,而节点为操作符,构建表达式树的过程与后缀表达式的计算类似,只不 ...

  8. Python与数据结构[3] -> 树/Tree[0] -> 二叉树及遍历二叉树的 Python 实现

    二叉树 / Binary Tree 二叉树是树结构的一种,但二叉树的每一个节点都最多只能有两个子节点. Binary Tree: 00 |_____ | | 00 00 |__ |__ | | | | ...

  9. 如何使用 JSP JSTL 显示/制作树(tree) 菜单

    JSTL里面并没有直接制作tree菜单的元素,因此递归是JSP JSTL显示/制作tree菜单的唯一方法. 以下详述如何制作tree菜单. 首先,在主页面里面增加包含制作树菜单的jsp,例如: 在my ...

  10. easyUI的下拉框combobox与树tree联动

    参与联动的有 2 个combobox 和 1 个tree: <input id="combobox1" class="easyui-combobox" n ...

随机推荐

  1. 【模板时间】◆模板·I◆ 倍增计算LCA

    [模板·I]LCA(倍增版) 既然是一篇重点在于介绍.分析一个模板的Blog,作者将主要分析其原理,可能会比较无趣……(提供C++模板) 另外,给reader们介绍另外一篇非常不错的Blog(我就是从 ...

  2. ssm整合-错误3

    1.警告: Unknown version string [3.1]. Default version will be used. 因为Tomcat版本为7,支持3.1版本的为Tomcat 8: 2. ...

  3. eCharts.js使用心得

    最近刚刚做了一个项目,需求是使用eCharts实现实时监控,可以动态的增加和删除数据,可以全屏展示,趁着现在还没忘干净,整理一下使用过程中出现的问题和经验.可能有分析的不到位的地方,不喜勿喷! 一.图 ...

  4. JAVA 扫雷 程序

    文件列表 2.主程序入口 3.1部分源代码 package MineSweeper; import java.awt.BorderLayout; import java.awt.Font; impor ...

  5. MethodTrace 生成的trace文件为空

    今天我准备生成一个trace文件,看看程序卡在哪里. 一般: Debug.startMethodTracing("yuge"); Debug.stopMethodTracing() ...

  6. 《Cracking the Coding Interview》——第17章:普通题——题目5

    2014-04-28 22:44 题目:猜数字游戏.四个数字,每个都是0~9之间.你每猜一次,我都告诉你,有多少个位置和数字都对(全对),有多少个位置错数字对(半对).比如“6309”,你猜“3701 ...

  7. 《Cracking the Coding Interview》——第1章:数组和字符串——题目3

    2014-03-18 01:32 题目:对于两个字符串,判断它们是否是Anagrams. 解法:统计俩单词字母构成是否相同即可. 代码: // 1.3 Given two strings, write ...

  8. windows下Tomcat安装

    环境Windows 64位 jdk1.8 1.Tomcat安装 官网地址:http://tomcat.apache.org/download-90.cgi 下载安装包,安装之后进行解压 2.修改htt ...

  9. selenium 使用谷歌浏览器模拟wap测试

    /** * 使用谷歌浏览器模拟手机浏览器 * @param devicesName * @author xxx * 创建时间:2017-06-15,更新时间:2017-06-15 * 备注 */ pu ...

  10. Python代码书写规范

    Python 编码规范 一 代码编排1 缩进.4个空格的缩进(编辑器都可以完成此功能),不要使用Tap,更不能混合使用Tap和空格.2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号.换行点要在 ...