树(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. Spring 中IOC(控制反转)&& 通过SET方式为属性注入值 && Spring表达式

    ### 1. Spring IoC IoC:Inversion of control:控制反转:在传统开发模式下,对象的创建过程和管理过程都是由开发者通过Java程序来实现的,操作权在开发者的Java ...

  2. PCA 实例演示二维数据降成1维

    import numpy as np # 将二维数据降成1维 num = [(2.5, 2.4), (0.5, 0.7), (2.2, 2.9), (1.9, 2.2), (3.1, 3.0), (2 ...

  3. Shell学习——终端打印

    1.echo1.1.默认情况下,echo在每次调用后会添加一个换行符1.2.待打印的内容,可以用单引号.双引号或者直接打印,不同的方式,有各自的限制1.2.1.使用不带引号的echo时,没法打印分好( ...

  4. PHP 基础知识总结

    PHP 代表 PHP: Hypertext Preprocessor PHP 文件可包含文本.HTML.JavaScript代码和 PHP 代码 PHP 代码在服务器上执行,结果以纯 HTML 形式返 ...

  5. iOS-xib的使用1

    一.File‘s owner的解析过程和使用: 1. storyboard:描述软件界面:iOS5.0后出来的. xib:描述软件界面:是storyboard前身. 2. 项目环境里面的所有资源都要通 ...

  6. emplace_back

    c++11 的 list deque 和 vector 增加了emplace_back函数,相对于push_back函数,它减少了一次类的构造,因此效率更高,推荐使用. #include <li ...

  7. 笔记-python -asynio

    笔记-python -asynio 1.      简介 asyncio是做什么的? asyncio is a library to write concurrent code using the a ...

  8. python基础之模块part1

    模块: 模块本质上就是一个Python程序. 所有说是对象的,一定可以通过  对象.方法  来实现某些操作. 模块种类: 内置模块 第三方模块 自定义模块 import在查找模块的顺序:内置模块--- ...

  9. 初见akka-01

    最近在学习akka,在看rpc相关的东西,有点脑子疼,哈哈 1.需求: 目前大多数分布式架构底层通信是通过RPC实现的,RPC框架非常多, 比如我们学过的Hadoop项目的RPC通信框架,但是Hado ...

  10. 使用.gitignore忽视项目中的文件/文件夹

    在项目开发的过程中,我们经常需要IDE来提高编程效率.然而,不同的IDE会生成各种各样的临时文件.在项目生命周期中,我们往往不需要关注这类文件的变更记录,因而我们是不需要将它们加入到源代码管理器中. ...