递推与递归算法--《算法分析与设计》
创始人
2024-06-02 20:29:13
0

1、Fibonacci数列

(1) 基础款:后面的状态由之前的状态所确定

优化:用数组存储递归过程中用到的各个状态

#include 
#include 
using namespace std;
int main()
{int fib[50];fib[0]=1;fib[1]=1;int n=15;for(int i=2;i

(2)洛谷---P1255 数楼梯数楼梯 - 洛谷https://www.luogu.com.cn/problem/P1255

高精度加法运算+斐波那契数列递归+二维数组存储数列

#include 
#include 
using namespace std;
int fib[5010][5010],len;//高精度做法,每一行的各个元素存这个数的各个位上的数
void add(int k)
{for(int i=1;i<=len;i++){fib[k][i]+=fib[k-1][i]+fib[k-2][i];if(fib[k][i]>=10){fib[k][i+1]=fib[k][i]/10;fib[k][i]=fib[k][i]%10;}if(fib[k][len+1]>0)len++;//判断边界情况,是否有增加的位数}
}
int main()
{int n;cin>>n;len=1;fib[1][1]=1;fib[2][1]=2;for(int i=3;i<=n;i++)add(i);for(int i=len;i>0;i--)cout<

(3) 过河卒

[NOIP2002 普及组] 过河卒 - 洛谷https://www.luogu.com.cn/problem/P1002经典DP好题:

1)利用两个一维数组存“马”的位置变化,两个数组中的同一个下标表示移动后“马”的一个状态;

2)状态方程:f[i][j]=f[i-1][j]+f[i][j-1];

因为当前点的可达路径是经过该点左边一点和上面一点,两个点的路径之和即为该点的路径

#include 
using namespace std;
long long f[40][40],M[40][40];
//f[][]数组记录各个坐标的可达路径,M[][]记录马的控制点,即不可达点
int dx[]={-2,-1,1,2,2,1,-1,-2};
int dy[]={1,2,2,1,-1,-2,-2,-1};
int main()
{//以方格中的(2,2)为坐标原点,就是为了防止马的控制点溢出的情况,//因为按照(0,0)为坐标原点,马有-2这个状态,会发生数组越界int xb,yb,xm,ym;scanf("%d%d%d%d",&xb,&yb,&xm,&ym);//初始化,边界时可通的路径只有一条//for(int i=2;i<=yb+2;i++)//  f[2][i]=1;//for(int i=2;i<=xb+2;i++)//    f[i][2]=1;//实践证明,注释的初始化边界方法不可行。//例如,右上角边界的前一个点为马的控制点,则右上角这个点一定没有路径可以走过去,但是按照上面的方法却被赋值为1,所以测试的洛谷第一个样例会多出来一些路径,就是这个原因//improvement:初始化时要用几个特例考虑特殊情况!!!for(int i=0;i<8;i++){int x,y;x=xm+dx[i]+2;y=ym+dy[i]+2;M[x][y]=1;}M[xm+2][ym+2]=1;//马自身的点也不能走,别忘了标记f[2][1]=1;//初始化起点,这样在从f[2][2]开始计算的时候会算当前路径为1.for(int i=2;i<=xb+2;i++)for(int j=2;j<=yb+2;j++){if(M[i][j]==1) f[i][j]=0;else f[i][j]=f[i-1][j]+f[i][j-1];//cout<

2、 集合的全排列问题

问题:计算数组list中第k--m个元素的全排列的个数

思路:将list[k--m]中的每一个元素分别与list[k]互换,并递归计算list[k+1--m]的全排列。

#include 
using namespace std;
void perm(int list[],int k,int m)
{if(k==m){for(int i=1;i<=m;i++){cout<

3 、整数划分问题

        问题:给定一个整数n,求最大加数s不超过m的划分数量有哪些

        (最大加数:划分中元素的最大项eg:6=4+1+1,则4即为最大加数)

        思路:根据n,m的值的情况分类讨论:

1)n=1或者m=1时,划分只会有一种情况,即f(1,m)=f(n,1)=1;

2)当n,因为最大数就是n,所以所有数都不会超过n.

此外, f(n,n)=f(n,n-1)+1;

解释:最大数自身就是一种划分,即s==m与s<=n-1两类情况

3)n>m>1时,f(n,m)=f(n,m-1)+f(n-m,m);

解释:f(n-m,m)相当于已经确定划分中有m,即只要确定剩下的和为n-m的数中最大数为m的划分有多少种。f(n,m-1)即s<=m-1的所有划分数。这两类的划分与2)情况类似。

#include 
using namespace std;
int k;
int split(int n,int m)
{if(n==1||m==1)return 1;else if(nm) return split(n,m-1)+split(n-m,m);
}
int main()
{int n=6;k=split(n,4);cout<<"所有的划分共:"<

(如何为实现展示划分?)

相关内容

热门资讯

“城阙辅三秦”,陕西为什么又被... “城阙辅三秦”,陕西为什么又被称为“三秦”?我有一次去陕西,听当地的人说是因为陕西可以分成三块地理位...
形容一个懒惰的人的语句 形容一个懒惰的人的语句我们班有四大天王,他们都是一些非常懒惰的人,成天不做作业,上课还要吵闹玩耍,成...
大侠传月扇怎样快速提高战力 大侠传月扇怎样快速提高战力亲爱的玩家,您好:您可以到我们的平台及论坛里面查看下相关的游戏攻略,希望能...
名侦探柯南剧场版15沉默的15... 名侦探柯南剧场版15沉默的15分钟 片尾曲叫什么?Don't Wanna LieDon't Wann...
早上打了一盆水,不知怎么撒了一... 早上打了一盆水,不知怎么撒了一地,请问今天运气好,因为今天会像盆水洒了,就有新的开始很正常,不用理会...
神舟天运p180c声卡驱动,急... 神舟天运p180c声卡驱动,急需新年的钟声里举起杯,任酒的醇香在空气中荡漾,任我对你的感激在杯里慢慢...
求小时候看过的动漫名字! 求小时候看过的动漫名字!《偷星九月天》 国产动漫 我记得女主角是偷东西的大盗 《惊爆校园》蛮...
魔兽世界30级兽人猎人去哪里能... 魔兽世界30级兽人猎人去哪里能抓到白熊说实话,看你做什么用的拉。现在BB的攻速统一了,所以带BB,稀...
梦三国马良的伤害基数是什么,是... 梦三国马良的伤害基数是什么,是伤害的倍数吗基数是什么W的技能基数5就是伤害 没一秒爆炸一次 每一次...
《十二生肖》是不是《成龙历险记... 《十二生肖》是不是《成龙历险记》得真人版不是《十二生肖》是《龙兄虎弟》的第三部
工程监理三控主要内容是什么 工程监理三控主要内容是什么三控:质量控制、进度控制、投资控制;两管:信息管理以及合同管理:一协调:组...
男人一生最重要的是什么?事业? 男人一生最重要的是什么?事业?男人一生最重要的是明白自己的责任所在,然后为之奋斗。是的,除非是高富帅...
有什么好看的 穿越小说 虐恋 ... 有什么好看的 穿越小说 虐恋 结局好的笑倾三国 美人劫 美人殇 绾青丝寻找前世之旅 超好看的小说嘿嘿
难以启齿的温柔是什么意思 难以启齿的温柔是什么意思不好意思说的温柔无法忘记的温柔。
分手了,还总是想起过往点点滴滴... 分手了,还总是想起过往点点滴滴,感觉像没有分手似的,做什么事情都没有心情赶紧走出阴影吧时间会冲淡一切...
桃花满天飞,缘分天注定,将喜结... 桃花满天飞,缘分天注定,将喜结良缘,相约白首的星座有哪些呢?相约白首的星座有天秤座,狮子座,金牛座,...
“长腿姐姐”王子文,不仅颜值高... “长腿姐姐”王子文,不仅颜值高演技也不差,你是从哪部剧开始喜欢她的?我是从欢乐颂的时候开始喜欢她的,...
说说那些先结婚后恋爱的人都是怎... 说说那些先结婚后恋爱的人都是怎样的心理吧?其实我觉得先结婚后恋爱的人,他们都是有一种比较着急,这一些...
100分求一首关于家庭有儿有女... 100分求一首关于家庭有儿有女[龙凤胎]的打油诗精品俊朗小伙真帅好洞伏哥,杰令美女送秋波。雨后彩虹淑...
一首很嗨的英文歌,开头是we ... 一首很嗨的英文歌,开头是we are hi hi ho, we are hi hi hey。歌名什么...