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即可,基本操作,不再赘述。
#include <bits/stdc++.h> using namespace std; const int maxn = + ; int Fib[maxn][];
int n; void prepare()
{
Fib[][] = ;
Fib[][] = ;
Fib[][] = ;
Fib[][] = ;
for (int i = ; i < maxn; i++)
{
for (int j = ; j <= max(Fib[i - ][], Fib[i - ][]); j++)
{
Fib[i][j] += Fib[i - ][j] + Fib[i - ][j];
Fib[i][j + ] = Fib[i][j] / ;
Fib[i][j] %= ;
}
Fib[i][] = max(Fib[i - ][], Fib[i - ][]);
if (Fib[i][Fib[i][] + ])
Fib[i][]++;
}
} int main()
{
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
prepare();
while (~scanf("%d", &n))
{
for (int i = Fib[n][]; i; i--)
printf("%d", Fib[n][i]);
printf("\n");
}
return ;
}
UVA1646-Edge Case(递推+斐波那契数列)的更多相关文章
- Luogu 1349 广义斐波那契数列(递推,矩阵,快速幂)
Luogu 1349 广义斐波那契数列(递推,矩阵,快速幂) Description 广义的斐波那契数列是指形如\[A_n=p*a_{n-1}+q*a_{n-2}\]的数列.今给定数列的两系数p和q, ...
- Luogu 1962 斐波那契数列(矩阵,递推)
Luogu 1962 斐波那契数列(矩阵,递推) Description 大家都知道,斐波那契数列是满足如下性质的一个数列: f(1) = 1 f(2) = 1 f(n) = f(n-1) + f(n ...
- 计蒜客 28319.Interesting Integers-类似斐波那契数列-递推思维题 (Benelux Algorithm Programming Contest 2014 Final ACM-ICPC Asia Training League 暑假第一阶段第二场 I)
I. Interesting Integers 传送门 应该是叫思维题吧,反正敲一下脑壳才知道自己哪里写错了.要敢于暴力. 这个题的题意就是给你一个数,让你逆推出递推的最开始的两个数(假设一开始的两个 ...
- POJ3070 斐波那契数列递推 矩阵快速幂模板题
题目分析: 对于给出的n,求出斐波那契数列第n项的最后4为数,当n很大的时候,普通的递推会超时,这里介绍用矩阵快速幂解决当递推次数很大时的结果,这里矩阵已经给出,直接计算即可 #include< ...
- [每日一题2020.06.14]leetcode #70 爬楼梯 斐波那契数列 记忆化搜索 递推通项公式
题目链接 题意 : 求斐波那契数列第n项 很简单一道题, 写它是因为想水一篇博客 勾起了我的回忆 首先, 求斐波那契数列, 一定 不 要 用 递归 ! 依稀记得当年校赛, 我在第一题交了20发超时, ...
- P5110 块速递推-光速幂、斐波那契数列通项
P5110 块速递推 题意 多次询问,求数列 \[a_i=\begin{cases}233a_{i-1}+666a_{i-2} & i>1\\ 0 & i=0\\ 1 & ...
- 斐波那契数列 Library
http://acm.tju.edu.cn/toj/showp3267.html3267. Library Time Limit: 1.0 Seconds Memory Limit: 6553 ...
- js中的斐波那契数列法
//斐波那契数列:1,2,3,5,8,13…… //从第3个起的第n个等于前两个之和 //解法1: var n1 = 1,n2 = 2; for(var i=3;i<101;i++){ var ...
- 剑指Offer 斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 思路: 不考虑递归 用递推的思路 AC代码: class Solution { public ...
随机推荐
- 通过DFS求解有向图(邻接表存储)中所有简单回路
前言 查阅了网上许多关于通过DFS算法对有向图中所有简单回路的查找,发现有很多关于使用DFS求解有向回路中所有简单回路的帖子,(在按照节点编号情况下)但大多数仅仅寻找了编号递增的回路.又或者未对结果去 ...
- CSS border-collapse 属性
表格边框合并: table { border-collapse:collapse; 边框会合并为一个单一的边框 } ----------------------------------------- ...
- js 时间戳转换为‘yyyy-MM-dd hh:mm’格式(es6语法)
function formatDate(date,fmt) { if(/(y+)/.test(fmt)){ fmt = fmt.replace(RegExp.$1,(date.getFullYear( ...
- zTree 节点文字过多处理方法
zTree setting.view.addDiyDom 方法可以实现自定义控件,指定节点显示内容.因此需要自己实现addDiyDom方法. 如果树节点不显示checkbox ,处理方法为: func ...
- 【代码笔记】Web-Javascript-javascript break和continue语句
一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- vue 构建项目 文件引入
1.vue引用依赖文件. 举例:axios 先安装 axios.如果直接安装 vue-axios 会报错 npm install axios npm install --save axios vue ...
- Angular调用Asp.net Core JWT Authentication接口
基本思路是调用登录接口,获取token,使用token请求其他JWT接口: getHomeDetails(): Observable<HomeDetails> { let headers ...
- p标签内容实现第二行缩进两个字体间距
p{ word-break:normal; text-indent: -2em; margin-left: 2em;} <p> p标签实现自动换行:p标签实现自动换行:p标签实现自动换行: ...
- java数据结构 • 面向对象 • 异常 • 随机数·时间
• 语法基础 • 控制流 • 数据结构 • 面向对象 • 异常 • 随机数 //String常用的方法: indexOf charAt charAt codePointAt compa ...
- 章节二、1-java概述-数据类型
一.数据类型 1.基本数据类型 a.数值型 1.整数:byte(1个字节=8位) min:-128 max:127 default:0 .short(2个字节=16位) min:-32768 max: ...