UVA1646-Edge Case(递推+斐波那契数列)
Time Limit: 3000 mSec
Problem Description
Input
For each test case, you get a single line containing one positive integer: n, with 3 ≤ n ≤ 10000.
Output
Sample Input
Sample Output
4
7
792070839848372253127
题解:这个题一看样例就知道涉及高精度,不过只有加法,即便用C++写也没有什么难度,大致看了一下网上的题解,都是只说找规律没有证明(可能是我没翻到),因此在这里简单做个说明。
首先设最终结果为a[n],递推过程中需要引入一个中间序列b[n],b[n]的含义是强制让1、2两条边不连的匹配数。由此我们得到第一个递推式:
a[n] = b[n] + 2*b[n-1]
解释一下,n的时候的所有成立的情况可以分为三类,
1、1号边和2号边都不连
2、1号边连,2号边不连
3、2号边连,1号边不连
第一种情况自然对应b[n],第二种情况,如果1连,则1的左右两条边都不能连,这时看我引入的点P以及它连出的线段,它们将多边形分成上下两部分,只看上半部分,第二种情况的情况数就等于上半部分多边形强制让点P连的线段不连的情况数,即b[n-1],第三种情况类似。
我们再找一个关系式就可以递推了。从第一种情况入手,第一种情况等价于只有n-1个点时3号边不连,那我们就求强制让3不连的匹配数,发现不太好求,那就求强制让3连的匹配数,如果3号边连,那么它左右两条边都不能连,因此类似刚才的分析,匹配数等于b[n-1-1]=b[n-2],这样一来得到如下关系式:
b[n] = a[n-1]-b[n-2]
有了这两个关系式,解出数列a即可,基本操作,不再赘述。
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 const int maxn = 10000 + 100; 6 7 int Fib[maxn][15010]; 8 int n; 9 10 void prepare() 11 { 12 Fib[3][0] = 1; 13 Fib[3][1] = 4; 14 Fib[4][0] = 1; 15 Fib[4][1] = 7; 16 for (int i = 5; i < maxn; i++) 17 { 18 for (int j = 1; j <= max(Fib[i - 1][0], Fib[i - 2][0]); j++) 19 { 20 Fib[i][j] += Fib[i - 1][j] + Fib[i - 2][j]; 21 Fib[i][j + 1] = Fib[i][j] / 10; 22 Fib[i][j] %= 10; 23 } 24 Fib[i][0] = max(Fib[i - 1][0], Fib[i - 2][0]); 25 if (Fib[i][Fib[i][0] + 1]) 26 Fib[i][0]++; 27 } 28 } 29 30 int main() 31 { 32 //freopen("input.txt", "r", stdin); 33 //freopen("output.txt", "w", stdout); 34 prepare(); 35 while (~scanf("%d", &n)) 36 { 37 for (int i = Fib[n][0]; i; i--) 38 printf("%d", Fib[n][i]); 39 printf("\n"); 40 } 41 return 0; 42 }
转载于:https://www.cnblogs.com/npugen/p/10405690.html
UVA1646-Edge Case(递推+斐波那契数列)相关推荐
- 求斐波那契数列的第n项
提要 本文介绍了4种(3种?)求斐波那契数列第n项的方法. 斐波那契数列简介 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda ...
- 斐波那契数列求解+尾递归
1.普通递归 这里观察f[4]的递归树代替f[10]的递归树(后者比较大,画不下). 使用递归求解的时候复杂度为T(n)=T(n−1)+T(n−2)T(n)=T(n-1)+T(n-2)T(n)=T(n ...
- 【组合数学】递推方程 ( 递推方程内容概要 | 递推方程定义 | 递推方程示例说明 | 斐波那契数列 )
文章目录 一.递推方程 内容概要 二.递推方程 定义 三.递推方程 示例 四.斐波那契数列 ( Fibnacci ) 一.递推方程 内容概要 递推方程 内容概要 : 递推方程定义 递推方程实例 常系数 ...
- 递归与递推 输出斐波拉契数列的前n项 python
输出斐波拉契数列的前n项 python 递归与递推 文章目录 输出斐波拉契数列的前n项 python 题设 题解 题设 以下数列 0 1 1 2 3 5 8 13 21 - 被称为斐波纳契数列. 这个 ...
- 斐波拉契数列的递推递归求解算法
介绍: 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数 ...
- 浅谈斐波那契数列——从递推到矩阵乘法
说在前面 相信大家都已经知道这个中外著名的费波纳切数列了吧,关于费波那契数列有很多有趣的性质,但我们这里不讲,在这里我们只是利用斐波那契数列来引出另一个神奇的东西,矩阵乘法,递推在这里是起一个对比与铺 ...
- 斐波那契数列的递推与递归求法
斐波那契数列的递推与递归求法: OVERVIEW 斐波那契数列的递推与递归求法: (1)递推求Fibonacci: (2)递归求Fibonacci: (3)递归求Fibonacci(记忆化数组优化): ...
- 斐波那契数列(递推)-C语言
斐波那契数列(递推) 记忆化搜索---------数组充当备忘录 #include <stdio.h> int Fib(int n); int FibSum(int n); int mai ...
- 递归、递推法斐波那契数列
编写2个函数,分别采用递归和递推方法计算斐波那契数列的前n项,函数返回列表,该列表中存放斐波那契数列,并写出程序调用这2个函数,输出斐波那契数列. #递归方法 def fib1 (n): if n & ...
最新文章
- 利用cre2进行分组模式匹配的实例
- Maya和Arnold的高级照明实践
- Vofuria 的 imageTarget 的图片无法显示或者显示为空白
- 国外centos服务器配置epel源
- inner join和left join还有right join的区别
- ‘聪明的搜索算法’ A*算法
- IntellIJ IDEA 启动 参数 配置
- Mysql的timestamp与datetime
- 动态页面技术(JSP/EL/JSTL)
- fragment在activity中的静态和动态用法_使用Matlab修改压缩Gif动态图片制作微信表情...
- 如何让Android手机远离间谍软件?看这里
- PLC基本指令系统优势
- 罗森伯格成功布线五星蕴海建国饭店
- qemu-guest-agent调研
- C语言关于有符号和无符号变量相互赋值的探讨
- Unable to preventDefault inside passive event listener due to target being treated as passive 怎么办?
- WPM2026 P沟道增强型MOS场效应晶体管
- 怎么样可以申请免费的云主机?
- gta5nat严格怎么办_GTA5OL显示我的NAT类型为完全 结果都看不到别的玩家
- 嵌入式面试题之单片机知识
热门文章
- AVVideoCompositionCoreAnimationTool not work --没有显示CALayer
- 考川大计算机硕士选专硕还是学硕好,考川大的财经学硕好还是西财的金融专硕好啊?......
- Pytorch Illegal instruction 解决(鸵鸟战术)
- 计算机不能识别华为手机,华为手机突然无法检测到SD卡怎么了?如何处理?
- linux 搭建 svn 小白教程
- 落地广州!百度智能云开物来了
- html打印A4长宽设置
- vgg 16模型的内存和参数量的计算
- AT89C51单片机外部中断使用和使用74LS373控制I/O口
- 使用vue-cli创建vue3+ts项目