zoukankan      html  css  js  c++  java
  • 递归--过河、分金币、寄信问题(范围)

    1。过河

    背景:一条河里有鳄鱼,鳄鱼可以吃河里任何虚弱的生物,鳄鱼吃掉任何一个生物后都会变虚弱,鳄鱼非常聪明。当有一个人过河时,

    假设:1)河里只有一条鳄鱼,那么人过河时会被鳄鱼吃掉。

              2)河里只有2条鳄鱼,那么人可以安全过河,因为如果其中一条鳄鱼吃掉人后会变虚弱,从而将会被另一条鳄鱼吃掉。鳄鱼们非常聪明,这时都不会吃人

              3)河里只有3条鳄鱼,那么人过河时会被吃掉。因为,其中任何一条鳄鱼吃掉人后,另外两条鳄鱼不敢吃掉这条鳄鱼。

    问:人在什么情况下可以安全过河?

            河里的鳄鱼时双数时。

    2.海盗分金币

     背景:有n个海盗准备分m个金币,每个海盗都有自己的编号,可以按照编号1~n的顺序提出自己分金币的计划,

       当自己的计划提出后只有获得超过半数以上的人支持才能被实施,否则将会被处死,海盗可以投1票给自己

       的方案。

    假设海盗们都非常聪明:问编号为1的海盗如何能活着获得最多的金币?

      1)当只有一个海盗时,这个海盗能获得m个金币;

      2)当只有2个海盗时(编号为1,2),那么无论编号1提出什么方案,其都会被处死(编号2的海盗肯定不会支持编号1,因此支持人数不超过半数)

           3)当只有3个海盗时(编号为1、2、3),那么根据2)可知,编号2会无条件支持编号1提出方案,因为编号1的方案一旦被否决,编号2的方案一定会被否决。

                 所以编号1提出的任何方案都一定会获得2票。因此,编号1可以独占m个金币,此时编号2、3获得的金币分别为0、0。   

           4)当只有4个海盗时(编号为1、2、3、4),由3)可知当编号1的方案被否决后,编号3、4只能获得0个金币,因此,只要编号1能给编号3、4各一个金币,

       那么编号3、4就一定会支持编号1的方案。因此编号1可以获得m-2个金币。编号2、3、4分别获得0、1、1个金币。

           5)当只有5个海盗时(编号为1、2、3、4、5),由4)可知,只要编号1能给编号3一个金币、编号4两个金币,就一定能获得3票;或给编号3一个金币、编号5两个

                金币,那么也能获得3票。此时编号1能拿到最多m-3个金币,此时金币分配方案为:m-3、0、1、2、0或m-3、0、1、0、2

           6)。。。

    3)寄信问题

      背景:假设村里的人相互寄信,自己只能寄一次信且不能寄信给自己,而且只能收一次信。

      问:当村里有n个人时,有多少种寄信方式?

      1)当村里只有0或1个人时有0种寄信方式

       2)当村里只有2个人时,只有1种寄信方式 a->b,b->a;

       3)当村里只有3个人时,只有2种寄信方式:a->b,b->c,c->a 或 a->c,c->b,b->a;

       4)  当村里只有4个人(a、b、c、d)时,假设1)a->b,b->a,此时有 f(4-2)种方式 ;2)a->b,b不传给a,此时可以将 (a->b)看作一个人(可以寄信和收信),这时有f(4-1)种方式

           3)因为a寄信有3个选择(寄给b、c或d),因此总的寄信方式有 (4-1)*(f(4-1)+f(4-2));

       。。。

      n)当村里有n个人时,f(n) = (n-1)*(f(n-1)+f(n-2));

  • 相关阅读:
    Vue 创建项目
    Vue组件之间的传参
    Vue自定义组件
    Python开发之路
    爬虫
    手撸系列
    Django从入门到不会放弃
    前端
    day29 TCP的三次握手 TCP的四次挥手 基于TCP的socket
    day28 客户端服务端架构介绍
  • 原文地址:https://www.cnblogs.com/indifferent/p/14399541.html
Copyright © 2011-2022 走看看