du熊的机器人

Description

  du熊正在玩一个别人刚送给它的机器人。这个机器人只能在一个棋盘中行走,棋盘的左上角格子为(0, 0),右下角格子为(X, Y)。

  du熊控制这个机器人从棋盘的左上角,走到右下角,再从右下角回到左上角。当机器人从左上角走到右下角的过程中,如果它当前所在格子为(x, y),则它只能走到(x+1, y)或(x, y+1)的格子;当机器人从右下角走回左上角的过程中,如果它当前所在的格子为(x, y),则它只能走到(x-1, y)或(x, y-1)的格子。并且du熊要求机器人从左上角走到右下角再走回左上角的整个过程中,最多经过同一个格子一次。

  请你帮du熊计算出这个机器人一共有多少种不同的路线。


Resolution

设所求的解为F(x,y)。

从(0,0)走到(x,y),所有可能解法是C(x+y,x)(C代表求组合数)。可以理解成从(0,0)走到(x,y),一共需要走(x+y)步,其中x步是横向移动,y步是横向移动。 所有可能走法对应于从(x+y)步中挑出x步,做横向移动。

同样地,从(x,y)走到(0,0),同样有C(x+y,x)种方案。从C(x+y,x)中方案中选出不同的两种路线,路线A作为从(0,0)走到(x,y)的路线 ,路线B作为从(x, y)走到(0, 0)的路线,路线A和路线B的组合共有C(C(x+y,x),2)种选择。但是这些组合中, 有些方案并不满足“最多经过同一个格子一次”的要求,所以需要将其剔除掉。

假设路线A和路线B不满足“最多经过同一个格子一次”,A和B经过两次的格子中(不考虑(1,1)和(x,y)),最左上角的格子的坐标是(i,j)。如下图所示,(i,j)只可能是(1,0),(0,1)或橘色方框中除(4,5)外的一个。两个在(x,0)(x>0)相交的路线必先在(1,0)相交。 两个在(0,y)(y>0)相交的路线必先在(0,1)相交。

分别计算这三种情况下,剔除的方案数:

  • 路线A和路线B最先在(1,0)相遇,需要剔除掉的方案数相当于从(1,0)到(x,y)选择两条不同路线的方案数,共有C(C(x-1+y,x-1),2)种。
  • 路线A和路线B最先在(0,1)相遇,需要剔除掉的方案数相当于从(0,1)到(x,y)选择两条不同路线的方案数,共有C(C(x+y-1,y-1),2)种。
  • 路线A和路线B最先在橘色方框中的一点(i,j)相遇,需要剔除掉的方案数等于从(0,0)到(i,j)两条不相交的方案数即F(i,j),乘以从(i,j)到(x,y)任选两条路线(可以重复)的方案数,即(C(x-i+y-j,x-i)2)种。

故可以得到如下的计算F(x,y)的公式:

转自:http://weihethu.github.io/blog/2013/04/14/du-bear-robots/

du熊的机器人的更多相关文章

  1. Python代码样例列表

    扫描左上角二维码,关注公众账号 数字货币量化投资,回复“1279”,获取以下600个Python经典例子源码 ├─algorithm│       Python用户推荐系统曼哈顿算法实现.py│    ...

  2. 熊乐:H3 BPM为加速企业流程管理提供源动力

    近日,在北京·金隅喜来登酒店,H3 BPM以"让天下没有难用的流程"为主题,正式发布H3 BPM10.0版本.全新的业务流程管理系统在易用性方面大大提升,并且全面支持Java与.N ...

  3. 【翻译】用AIML实现的Python人工智能聊天机器人

    前言 用python的AIML包很容易就能写一个人工智能聊天机器人. AIML是Artificial Intelligence Markup Language的简写, 但它只是一个简单的XML. 下面 ...

  4. 3.C#面向对象基础聊天机器人

    基于控制台的简单版的聊天机器人,词库可以自己添加. 聊天机器人1.0版本 源码如下: using System; using System.Collections.Generic; using Sys ...

  5. Python 简易聊天机器人

    聊天机器人 | |-----MySql | |---module--"逻辑运算层" | | | |---ciku--"与词库交互" | | | |---dict ...

  6. Linux下查看磁盘与目录的容量——df、du

    df:列出文件系统的整体磁盘使用量: du:评估文件系统的磁盘使用量(常用于评估目录所占容量) df参数: -a:列出所有的文件系统,包括系统特有的/proc等文件系统 -k:以KB的容量显示各文件系 ...

  7. linux du和df

    df.du和fdisk这三个常用命令:df用于检查文件系统磁盘占用情况,du检查磁盘空间占用情况,而fdisk用于磁盘分区. du,disk usage,是通过搜索文件来计算每个文件的大小然后累加,d ...

  8. java 聊天猜拳机器人

    2016-12-06本随笔记录第一次制作经过,感谢各位大神指导. 工具:eclipse;JAVA JDK; 语言:java 时间:2016.11.23 作者:潇洒鸿图 地址:http://www.cn ...

  9. 用VB实现SmartQQ机器人

    这里为了便于介绍程序设计的流程,更多以代码形式给出,具体可用火狐浏览器的firebug插件来抓包分析,或者用谷歌浏览器的开发者工具进行抓包.抓包地址是:http://w.qq.com 第一步,是二维码 ...

随机推荐

  1. 利用django.core.mail发送QQ邮件的配置

    1.在 settings.py 的最后面加上类似这些 EMAIL_USE_SSL = True EMAIL_HOST = 'smtp.qq.com' # 如果是 163 改成 smtp.163.com ...

  2. Backbone设计思路和关键源码分析

    一. Backbone的江湖地位: backbone作为一个老牌js框架为大规模前端开发提供了新的开发思路:前端MVC模式,这个模式也是前端开发演变过程中的一个重要里程碑,也为MVVM和Redux等开 ...

  3. python-基础-时间日期处理小结(datetime模块)

    在写代码的时候,总是会遇到各式各样关于时间的处理和要求.总结一下: 首先,本文是关于datetime模块的各种总结. 开始. 一.datetime基本操作 1.获取当前datetime time = ...

  4. [QT]加快qt编译:设置默认多核编译qt

    使用环境:win7 + QT Creator 4.2.1 + QT5.8 + MinGW5.3.0 32bit 设置默认多核编译qt  来源:http://stackoverflow.com/ques ...

  5. streamsets geoip 使用

    geoip 分析对于网站数据分析是很方便的 安装geoip2 下载地址 https://dev.maxmind.com/geoip/geoip2/geolite2/ 配置streamsets geoi ...

  6. 基于typescript 强大的 nestjs 框架试用

    nestjs 一个nodejs 的graphql 框架 安装 npm i -g @nestjs/cli 初始化项目 nest new dalong 运行demo 使用yarn yarn start 添 ...

  7. 关于 android百度地图 调用 地理位置 经纬度坐标,只调用一次的解决方法,通知栏不总是 搜索 GPS 。。。

    上代码吧... //读取当前坐标 final LocationClient mLocationClient = new LocationClient(mActivity); mLocationClie ...

  8. Linux新手入门:Unable to locate package错误解决办法

    最近刚开始接触Linux,在虚拟机中装了个Ubuntu,当前的版本是Ubuntu 11.10,装好后自然少不了安装一些软件,在设置了软件的源后,就开始了 sudo apt-get install,结果 ...

  9. 自动手动随便你 Win7驱动程序安装自己设

    Win7系统是非常智能方便的操作系统,可以自动安装硬件驱动程序,为用户提供了很多方便.但是并不是所有的驱动程序和硬件都能完美兼容,如果不合适就需要卸载了重新安装:还有一些朋友就习惯自己安装驱动,那么, ...

  10. C# CS1591 缺少对公共可见类型或成员的 XML 注释 问题解决

    最近在写web api的项目,用到微软的Web api help page组件,用于自动对生成API文档,见博文: https://www.cnblogs.com/lenmom/p/9081363.h ...