NOIP2013提高问题求解T2(关于递推与递归)
同步发表于我的洛谷博客。
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(关于递推与递归)的更多相关文章
- 从一道NOI练习题说递推和递归
一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可 ...
- 【Luogu】【关卡2-12】递推与递归二分(2017年10月)
任务说明:递推,层层递进,由基础推向顶层.二分不仅可以用来查找数据,还可以确定最合适的值. P1192 台阶问题 有N级的台阶,你一开始在底部,每次可以向上迈最多K级台阶(最少1级),问到达第N级台阶 ...
- 观光公交 2011年NOIP全国联赛提高组(贪心,递推)
观光公交 2011年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 风景迷人的小城 Y 市 ...
- NOIP2013提高组 T2 火柴排队
一开始看也想不到这居然要用到逆序对,归并排序. 先来看看题目: 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间 ...
- 0x02 递推与递归
[例题]CH0301 递归实现指数型枚举 #include <iostream> #include <cstdio> #include <algorithm> #i ...
- 题解报告:hdu 2084 数塔(递推dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这 ...
- 再谈循环&迭代&回溯&递归&递推这些基本概念
循环:不断重复进行某一运算.操作. 迭代:不断对前一旧值运算得到新值直到达到精度.一般用于得到近似目标值,反复循环同一运算式(函数),并且总是把前一 次运算结果反代会运算式进行下一次运算 递推:从初值 ...
- 「学习笔记」递推 & 递归
引入 假设我们想计算 \(f(x) = x!\).除了简单的 for 循环,我们也可以使用递归. 递归是什么意思呢?我们可以把 \(f(x)\) 用 \(f(x - 1)\) 表示,即 \(f(x) ...
- (acwing蓝桥杯c++AB组)1.2 递推
1.2 递推与递归 文章目录 1.2 递推与递归 位运算相关知识补充 pair与vector相关知识补充 题目目录与网址链接 下面的讲解主要针对这道题目的题解AcWing 116. 飞行员兄弟 - A ...
随机推荐
- Kendo UI for jQuery使用教程:初始化jQuery插件
[Kendo UI for jQuery最新试用版下载] Kendo UI目前最新提供Kendo UI for jQuery.Kendo UI for Angular.Kendo UI Support ...
- alembic在tornado项目中的应用
在项目中引用alembic 协助tornado项目生成数据表结构 alembic revision --autogenerate -m "create tables" 第二步执行 ...
- TensorFlow使用记录 (一): 基本概念
基本使用 使用graph来表示计算任务 在被称之为Session的上下文中执行graph 使用tensor表示数据 通过Variable维护状态 使用feed和fetch可以为任意的操作(op)赋值或 ...
- Java使用阿里云OSS对象存储上传图片
原 Java使用阿里云OSS对象存储上传图片 2017年03月27日 10:47:28 陌上桑花开花 阅读数 26804更多 分类专栏: 工作案例总结 版权声明:本文为博主原创文章,遵循CC 4.0 ...
- STS热部署方法(springboot)
sts热部署,即是在项目中修改代码不用重新启动服务,提高效率. 方法如下: 1.在pom文件中引入 devtools 依赖: <dependency> <groupId> ...
- postman 测试api接口
安装:https://www.getpostman.com/ 谷歌插件安装需要翻墙才能访问,那么直接去官网下载pc端 代码图片: 非常简单 post: 代码图片: 剪头地方,必选
- webdriver驱动火狐浏览器报错:Unable to find a matching set of capabilities
raise exception_class(message, screen, stacktrace)selenium.common.exceptions.SessionNotCreatedExcept ...
- shiro所需的依赖
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring< ...
- 2019Java第十三周课程总结
这周主要是学习了监听器还有制作记事本,主要可以由一下代码来体现 监听器 实验代码 package text12; import java.awt.Container; import java.awt. ...
- 胜利点20191010-6 alpha week 1/2 Scrum立会报告+燃尽图 04
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8749 一.小组情况组长:贺敬文组员:彭思雨 王志文 位军营 杨萍队名:胜 ...