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. @InitBinder装配自定义编辑器

    @InitBinder装配自定义编辑器 第一步:BaseController.java,标注@InitBinder public class BaseController { @InitBinder ...

  2. Leetcode 1024. Video Stitching

    class Solution: def helper(self,l,r,clips)->int: maxL,maxR=0,0 iL,iR=-1,-1 for i,c in enumerate(c ...

  3. python中多进程

    多进程 什么是进程 进程:正在进行的一个过程或者说一个任务,而负责执行任务的是CPU. 进程和程序的区别 程序仅仅是一堆代码而已,而进程指的是程序的运行过程. 举例 想象以为有着一手好厨艺的科学家肖亚 ...

  4. $.each()的用法

    var obj = { one:1, two:2, three:3}; $.each(obj, function(key, val) { console.log(key);//one two thre ...

  5. 监控操作系统的CPU、内存、磁盘

    Linux 四大件:CPU.内存.磁盘.网络 CPU 就像人的大脑,主要负责相关事情的判断以及实际处理的机制. CPU的性能主要体现在其运行程序的速度上.影响运行速度的性能指标包括CPU的工作频率.C ...

  6. linux shell获取用户输入

    一.获取用户输入1.基本读取read命令接收标准输入的输入,或其它文件描述符的输入.得到输入后,read命令将数据输入放入一个标准变量中.[root@rac2 ~]# cat t8.sh #!/bin ...

  7. 为什么既要有IP地址还要有MAC地址

    在脑海中一直有个疑问,在网络上发送信息的时候为什么既要有IP地址还要有MAC地址,IP是唯一的,MAC地址也是唯一的,用一个难道不行么? 既然每个以太网设备在出厂时都有一个唯一的MAC地址了,那为什么 ...

  8. jquery 绘图工具 flot 学习笔记

    今天想做一个统计图表,像163博客的流量统计一样的,借助 flot 实现了,而且很简单. flot网址:http://code.google.com/p/flot/ 下载 JS 文件,使用方法和 jq ...

  9. python 书籍推荐 一

    最近"瑞丽模特学Python"的热点牵动了大江南北程序员的心,有人说这是炒作,也有人说这是推广Python的爆点...我嘿嘿一笑,美女就是美女,眼光那是杠杠的,不仅人美,学的语言也 ...

  10. [Android] 开发第八天

    View 类是所有 UI组件的基类,它包含的 XML 属性和方法是所有组件都可使用的. ViewGroup 继承了 View 类,主要当作容器类使用,它是一个抽象类,实际使用中会使用它的子类作为容器. ...