树(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表示向下砍(影响下一行)

我们用主动转移,这样不用跑满。

转移比较麻烦

  1. //S 状态 c数量 别问我为什么叫这个,我乱取的
  2. if(x.S&(1<<k-1))dfs(k+1,x,now,way*2);
  3. //这一格已经被占住了,那么这一位不论贴什么都不行,直接把方案*2,状态不改
  4. else {// 可以砍树,且一定砍
  5. now.c++;int fl=1;
  6. if(k<w){
  7. if(!(x.S&(1<<k)))dfs(k+2,x,now,way*2);// 下一个位置没有被占
  8. else fl=2;//不管贴什么都要往下砍,方案*2
  9. }
  10. now.S|=(1<<k-1);// 往下砍
  11. if(k<w)dfs(k+1,x,now,way*fl);//不是最后一个
  12. else dfs(k+1,x,now,way*2);// 最后一个
  13. }

树(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. JDK1.8简单配置环境变量---两步曲

    鄙人最近重新装完系统之后,在安装和配置jdk1.8的时候,发现网上许多教程配置jdk环境变量时都还在沿用传统的方式配置,但是随着技术的更新,完全没有必要那么麻烦了. 下载和安装jdk的教程,在这里就不 ...

  2. 39条常见的Linux系统简单面试题

    39条常见的Linux系统简单面试题 本文主要分享39条常见的Linux系统简单面试题,其中包括如何看当前Linux系统有几颗物理CPU和每颗CPU的核数.如何实时查看网卡流量为多少等等,希望对你有所 ...

  3. Linux系统崩溃,数据迁移

    就在1小时前,处理了件如标题所述的麻烦事儿.吃完午饭,想对此作个总结,一来自己梳理下过程以便后面遇见类似的事可以 快速处理,二来同行的小伙伴们可以探讨下.故事是这样的,公司所在园区物业晚上断电8小时, ...

  4. linux系统批量创建用户和生成8位随机密码

    1.1    脚本案例 批量创建20个用户,用户名为user1-user20,并生成8位随机登录密码,用户组采用键盘输入的方式,并将用户名及登录密码保存到/tmp/create_user.txt普通文 ...

  5. ethereum(以太坊)(十二)--应用(二)__投票(基础总和)

    编写应用合约之前,先弄清它的逻辑,有助于我们更好的部署合约 pragma solidity ^0.4.21; pragma experimental ABIEncoderV2; contract vo ...

  6. yii2 url 美化参数

    所谓的url参数美化就是将冗长的字符串 进行正则替换 yii2 框架的url参数美化完成需要完成两个阶段 第一个阶段分apache和nginx 两种的配置 apache :1.1 必须开启rewrit ...

  7. 477. Total Hamming Distance

    class Solution { public: int totalHammingDistance(vector<int>& nums) { ; ; i < ; i++) { ...

  8. C++基础 inline 默认参数 函数占位参数 函数重载

    1. inline内联函数 内联函数用于替换宏, 实例: 其中宏和 ++ 连用有副作用. #include "iostream" using namespace std; #def ...

  9. C语言进阶—— 逻辑运算符分析15

    印象中的逻辑运算符: ---学生:老师,在我的印象中,逻辑运算符用在条件判断的时候,真挺简单的,还有必要深究吗? ---老师:逻辑运算符确实在条件判断的时候用的比较多,但是并不能说简单... 请思考下 ...

  10. 统计输入任意的字符中中英文字母,空格和其他字符的个数 python

    这里用到了三个函数: #判断是否为数字:str.isdigit()#是否为字母:str.isalpha()#是否为空格:str.isspace() def tongji(str): alpha = 0 ...