概述
递推专练
——你没看错,还是原来的递归,还是原来的递推。。。
复习主题:今天,让我们来郑重其事地好好复习一下递推算法!
递推算法:客观世界中的各个事物之间,或者一个事物内部的各元素之间,往往存在着很多本质上的关联。我们设计程序前,应该要通过细心的观察、丰富的联想、不断的尝试推理,尽可能先归纳总结其内在规律,然后再把规律性的东西抽象成数学模型,最后再去编程实现。这种高端大气上档次的算法就是递推。其实说白了就是小学三年级的数学里的找规律解应用题。。。
递归与递推:递归算法是从大规模问题出发,把问题归约为小问题,以此类推,层层深入,直到一个基础问题可以直接求解,然后再层层返回,不断用已经求出的小问题的解去构造问题的解,直到初始问题被解决。从而可以看出,递归算法需要经过一个由大到小,再由小到大的问题解决过程。并且在递归过程中可能会有子问题被反复求解,造成了大量的重复计算。递推算法是直接从一个容易解决的小问题出发,递进地求解规模越来越大的问题,直到初始问题被解决。从而可以看出,递推算法只经过了由小到大的问题解决过程,并且这一过程一般是直线式的,中途没有反复。其实以上全部都是废话。。。
递推例题:
#161.取数问题
题目描述
我们来玩一个游戏:自然数1到N,按顺序列成一排,你可以从中取走任意个数,但是相邻的两个不可以同时被取走。如果你能算出一共有多少种取法,那么你会被天神Lijiganjun奖励。
这一题就是最简单的递推。递推递推,顾名思义就是要递着找规律推出答案。这一题的规律很好找,就是当前项相等于前两项之和——a【i】=a【i-1】+a【i-2】。只要用表格式列出,你就会发现这其实是一道典型的斐波那契数列问题。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
longlong a[100],i,n;
cin>>n;
a[1]=2;a[2]=3;
for(i=3;i<=n;i++)
a[i]=a[i-2]+a[i-1];
cout<<a[n];
}
#162. 骨牌铺法
题目描述
有 1×n 的一个长方形,用一个 1×1、1×2和 1×3 的骨牌铺满方格。例如当 n=3 时为 1×3 的方格。 此时 用 1×1、1×2和 1×3 的骨牌铺满方格,共有四种铺法。
这一题就要复杂一点了吧。不过只要是递归,列表一般都能解决。列表如下:
1格 | 2格 | 3格 | 4格 | 5格 | 6格 |
1 | 2 | 4 | 7=1+2+3 | 13=2+4+7 | 24=4+7+13 |
然后我们会发现从第4个开始,每项等于前三项之和,无非就是“高级一点的”斐波那契数列。用别的思路或许很难,但用递推就十分容易了。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long a[100]={0},i,n;
cin>>n;
a[1]=1; a[2]=2; a[3]=4;
for(i=4;i<=n;i++)
a[i]=a[i-1]+a[i-2]+a[i-3];
cout<<a[n];
}
递推题目虽然都很短,但还是有不少难题。
#163. 平面分割
题目描述
同一平面内有 n(n≤500)条直线,已知其中 p(p≥2)条直线相交于同一点,则这 n 条直线最多能将 平面分割成多少个不同的区域?
这一题就很麻烦了,因为有两个变量,所以常规的递推思想肯定是行不通的。但这毕竟还是递推,那就还是用常规思路来列表格。表格如下:
| N=1 | N=2 | N=3 | N=4 |
P=1 | 2 | 4 | 6 | 8 |
P=2 | 无 | 4 | 7 | 11 |
P=3 | 无 | 无 | 6 | 10 |
P=4 | 无 | 无 | 无 | 8 |
备注:因为有两个变量,所以是二维表格;“无”处是不存在的情况(不解释)。
这题想要说清楚规律十分麻烦,就不解释了。直接上代码。
代码如下:
#include<bits/stdc++.h>
usingnamespace std;
intmain()
{
long long i,j,s,n,p;
cin>>n>>p;
s=2*p;
for(i=p+1;i<=n;i++)
s=s+i;
cout<<s;
}
想学好递推不容易,主要就是靠多练!!!
最后
以上就是自由音响为你收集整理的递推专练#162. 骨牌铺法题目描述#163. 平面分割题目描述 这一题就很麻烦了,因为有两个变量,所以常规的递推思想肯定是行不通的。但这毕竟还是递推,那就还是用常规思路来列表格。表格如下: N=1N=2N=3N=4P=12468P=2无4711P=3无无610P=4无无无8备注:因为有两个变量,所以是二维表格;“无”处是不存在的情况(不解释)。这题想要说清楚规律十分麻烦,就不解释了。直接上代码。代码如下:#include
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复