同步发表于我的洛谷博客。

NOIP2013提高问题求解2:

现有一只青蛙,初始时在n号荷叶上。当它某一时刻在k号荷叶上时,下一时刻将等概率地随机跳到1,2,……,k号荷叶之一上,直到跳到第1号荷叶为止。当n=2时,平均一共跳2次,n=3时,平均一共跳2.5次。当n等于5时,平均一共跳几次。

先将问题转为青蛙随机跳了一步以后的情况,分为5种情况,分别是落在1号、2号、3号、4号、5号荷叶上。每种情况发生的概率为1/5。

然后设f(n)为n片荷叶所需的平均次数。显然,f(1)=1。

先从简单的考虑:

当n=2:
共2种情况:落在1号或2号上。
落在1号上,问题变为求f(1)。
落在2号上,问题变为求f(2)+1。

Q:为什么要加1?

A:因为它已经跳过一次了。

Q:为什么f(1)不用?

A:因为它已经到了。

由于是求平均值,且f(1)已知,那么可列方程:

f(2)=(f(1)+1+f(2))*1/2

解得f(2)=2。

Q:为什么要把所有的相加?

A:请考虑加法原理。

然后到n=3的状态:

共3种情况:落在1号或2号或3号上。
落在1号上,问题变为求f(1)。
落在2号上,问题变为求f(2)+1。
落在3号上,问题变为求f(3)+1。

熟不熟悉?

每一个原问题都可以分成n个子问题,子问题规模变小(???),子问题相加即可求得原问题的答案。

有点递归的感觉。

来看看扩展到n=k的状态:

共k种情况:落在1号或2号或3号或……或k号上。
落在1号上,问题变为求f(1)。
落在2号上,问题变为求f(2)+1。
落在3号上,问题变为求f(3)+1。
……
此处省略
……
落在k号上,问题变为求f(k)+1。

可得方程f(k)=(f(1)+1+f(2)+1+f(3)+······+1+f(k))*1/k

接下来,对上面这个方程进行合并同类项:

k*f(k)=(f(1)+1+f(2)+1+f(3)+······+1+f(k))

k*f(k)=k-1+(f(1)+f(2)+f(3)+······+f(k))

(k-1)*f(k)=k-1+(f(1)+f(2)+f(3)+······+f(k-1))

f(k)=1+(f(1)+f(2)+f(3)+······+f(k-1))*1/k

至此,f(n)的递推公式就被我们推出了:

f(n)=1+(f(1)+..f(n-1))/(n-1)

这道题的难点也就在于递推公式的推出,推出递推公式,n=5神马的,都是渣渣。

好了,now,来个总结:首先我们先用递归的思想,来尝试着把问题缩小规模,规模缩小后,就可以列出关系式了。再从一般到特殊,列出一般情况下的关系式后,化简,我们发现化简后的式子的形式形如递推式,那么,我们就可以自下往上来求解了。

实际上,有时候递推和递归从本质上来说,并无差别。有些时候我们用递归的思想来考虑问题,用递推的方式来实现求解,这样可以大大减小思维难度及代码实现难度。

至于为什么递推和递归从本质上来说,并无差别。首先得搞清楚,这是对于一个能用递推求解的问题而言的。

因为任何循环都可以用递归写(只要你胆够大,不怕爆0),而一般我们实现递推无非就是循环+数组之类的了。所以,递推一定可以用递归来实现。For example,斐波那契数列。(想想动态规划吧,dfs无非就是把复杂度增加了而已)但请注意,不是所有的递归都可以用循环实现滴,比如说,回溯法。那么,可得出:递归不一定可以用递推来实现。

希望对你能有帮助,哪怕一点点,我也满足了。

可转载,请注明作者及其来源。

NOIP2013提高问题求解T2(关于递推与递归)的更多相关文章

  1. 从一道NOI练习题说递推和递归

    一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可 ...

  2. 【Luogu】【关卡2-12】递推与递归二分(2017年10月)

    任务说明:递推,层层递进,由基础推向顶层.二分不仅可以用来查找数据,还可以确定最合适的值. P1192 台阶问题 有N级的台阶,你一开始在底部,每次可以向上迈最多K级台阶(最少1级),问到达第N级台阶 ...

  3. 观光公交 2011年NOIP全国联赛提高组(贪心,递推)

    观光公交 2011年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold       题目描述 Description 风景迷人的小城 Y 市 ...

  4. NOIP2013提高组 T2 火柴排队

    一开始看也想不到这居然要用到逆序对,归并排序. 先来看看题目: 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间 ...

  5. 0x02 递推与递归

    [例题]CH0301 递归实现指数型枚举 #include <iostream> #include <cstdio> #include <algorithm> #i ...

  6. 题解报告:hdu 2084 数塔(递推dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这 ...

  7. 再谈循环&迭代&回溯&递归&递推这些基本概念

    循环:不断重复进行某一运算.操作. 迭代:不断对前一旧值运算得到新值直到达到精度.一般用于得到近似目标值,反复循环同一运算式(函数),并且总是把前一 次运算结果反代会运算式进行下一次运算 递推:从初值 ...

  8. 「学习笔记」递推 & 递归

    引入 假设我们想计算 \(f(x) = x!\).除了简单的 for 循环,我们也可以使用递归. 递归是什么意思呢?我们可以把 \(f(x)\) 用 \(f(x - 1)\) 表示,即 \(f(x) ...

  9. (acwing蓝桥杯c++AB组)1.2 递推

    1.2 递推与递归 文章目录 1.2 递推与递归 位运算相关知识补充 pair与vector相关知识补充 题目目录与网址链接 下面的讲解主要针对这道题目的题解AcWing 116. 飞行员兄弟 - A ...

随机推荐

  1. BZOJ1257 [CQOI2007]余数之和[规律]

    被zcr和yy轮流嘲讽了一番,感觉自己智商日渐下降...\TヘTツ 先拆mod变成整数除法,然后就是$nk- \Sigma_{i=1}^{n} i * \lfloor \frac{k}{i} \rfl ...

  2. Five minutes to understand async and defer

    Script tag When we want to insert a script into a web page, the standard way is to use the script ta ...

  3. Fiddler debug 拦截文件

    前言 前端每次本地调试的需要重新build文件,而且如果当前文件是在另外一个项目中使用,则还需要拷贝到另外一个项目下面.这个工作很耗时.如果使用替换包,可以节省很多时间,也便于开发. 解决方案 用Fi ...

  4. idea生成实体类

    1.点击View->Tool Windows->Database 2.点击Datebase框的加号,DateSource,选择对应的数据源,配置对应信息,点击Test Connection ...

  5. 字典树Trie--实现敏感词过滤

    序言 Trie树 资料 https://blog.csdn.net/m0_37907797/article/details/103272967?utm_source=apphttps://blog.c ...

  6. BZOJ 2434: [Noi2011]阿狸的打字机 AC自动机+fail树+线段树

    Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的 ...

  7. Visual Studio 2008:路径设置

    造冰箱的大熊猫,本文适用于Visual Studio 2008中文版@cnblogs 2018/11/30 1.头文件路径设置 如果头文件所在路径未在环境变量中定义,编译时会出现C1083错误,提示无 ...

  8. sh_03_列表的数据统计

    sh_03_列表的数据统计 name_list = ["张三", "李四", "王五", "王小二", "张三 ...

  9. HDU 3669 [Cross the Wall] DP斜率优化

    问题分析 首先,如果一个人的\(w\)和\(h\)均小于另一个人,那么这个人显然可以被省略.如果我们将剩下的人按\(w[i]\)递增排序,那么\(h[i]\)就是递减. 之后我们考虑DP. 我们设\( ...

  10. ...扩展运算符+rest参数+call/apply/bind

    之前在set,map里面有提过扩展运算符的概念,但是今天偶然遇到一个问题,类似于扩展运算符的经典用法,突然发现对其了解不是很深,所以再来整理一下扩展运算符的相关知识. 重点:扩展运算符内部调用的是数据 ...