博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU2044 一只小蜜蜂...
阅读量:6481 次
发布时间:2019-06-23

本文共 925 字,大约阅读时间需要 3 分钟。

问题链接:。基础训练题,用C语言编写程序。

问题简述:参见上述链接。

问题分析这个问题非常类似于,略微有些不同。

站在第n个蜂房想一下,前一步是从哪里来的,问题就清楚了。

看图可知,由于蜜蜂每次只能从前1个蜂房前2个蜂房过来,那么f(n)=f(n-2)+f(n-1)。这部就是一个菲波拉契数列吗?就是一个递推问题?

可是,开始时候,蜜蜂是在第1个蜂房,所以数列的开始几项会有所不同。

f(1)=0,因为蜜蜂开始在第1个蜂房;

f(2)=1,蜜蜂只能从第1个蜂房来到第2个蜂房

f(3)=2,蜜蜂可以从第1个蜂房过来,也可以第2个蜂房过来

f(n)=f(n-2)+f(n-1),n>3。

有了以上的递推式,一切几乎就解决了。

还需要考虑的一点是,蜜蜂从a蜂房到b蜂房的各种可能路径,相当于从第1蜂房到第b-a+1蜂房。

另外一点是,还是先打表吧,以防万一。

程序说明:(略)。

AC的C语言程序如下:

/* HDU2044 一只小蜜蜂... */#include 
#define MAXN 50typedef unsigned long long ULL;ULL fn[MAXN+1];void setfn(){ int i; fn[0] = 0; fn[1] = 0; fn[2] = 1; fn[3] = 2; for(i=4; i<=MAXN; i++) fn[i] = fn[i-2] + fn[i-1];}int main(void){ int n, a, b; // 先打表(以防万一测试集合大) setfn(); scanf("%d", &n); while(n--) { // 读入a和b scanf("%d%d", &a, &b); // 输出结果 printf("%lld\n", fn[b - a + 1]); } return 0;}

转载于:https://www.cnblogs.com/tigerisland/p/7564645.html

你可能感兴趣的文章
-27979 LoadRunner 错误27979 找不到请求表单 Action.c(73): Error -27979: Requested form not found...
查看>>
[LeetCode] Minimum Depth of Binary Tree
查看>>
,net运行框架
查看>>
Java 中 Emoji 的正则表达式
查看>>
Mixin Network第一届开发者大赛作品介绍- dodice, diceos和Fox.one luckycoin
查看>>
安卓Glide(4.7.1)使用笔记 01 - 引入项目
查看>>
中金易云:为出版社找到下一本《解忧杂货店》
查看>>
Flex布局
查看>>
Material Design之 AppbarLayout 开发实践总结
查看>>
Flutter之MaterialApp使用详解
查看>>
DataBinding最全使用说明
查看>>
原生Js交互之DSBridge
查看>>
Matlab编程之——卷积神经网络CNN代码解析
查看>>
三篇文章了解 TiDB 技术内幕 —— 说计算
查看>>
copy strong weak assign的区别
查看>>
OpenCV 入门
查看>>
css 3D transform变换
查看>>
ele表格合并行之后的selection选中
查看>>
正则表达式分解剖析(一文悟透正则表达式)
查看>>
解决UILable标点符号居中的问题
查看>>