UVa 11000 - Bee

题目:印度蜜蜂,每年每只雄蜂产下一只雌蜂和一只雄蜂,每只雌蜂产下一只雄蜂,然后就死去;

现在发现了一只不会死的雌蜂,问以她为起始点,第N年有多少雄蜂和一共多少蜜蜂。

分析:dp,FIb数列类似物。

设第k年的雄蜂和雌蜂分别为m(k)与f(k),则有如下递推关系:

① f(k)= m(k-1)+ 1;(只有雄蜂会产下雌蜂,加上那只不死的)

② m(k)= f(k-1)+ m(k-1);(每只雄蜂和雌蜂分别产下一只雄蜂)

整理得:m(k)= m(k-1)+ m(k-2)+ 1;(①带入②)

说明:使用long long类型防止溢出。

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>

using namespace std;

long long f[60],m[60];

int main()
{
	m[1] = 1LL,m[0] = 0LL;
	for (int i = 2 ; i < 60 ; ++ i)
		m[i] = m[i-2]+m[i-1]+1LL;
	int n;
	while (~scanf("%d",&n) && n != -1)
		printf("%lld %lld\n",m[n],m[n+1]);

    return 0;
}
时间: 2025-01-06 00:32:34

UVa 11000 - Bee的相关文章

uva 808 - Bee Breeding(坐标问题)

题目链接:uva 808 - Bee Breeding 题目大意:按照题目中图片的方式将所有的正六边形标上序号,然后给出两个序号,问这两六边形最短要走多少步. 解题思路:将图中的坐标系进行修改 这样,每个位置和周围(除了左上角和右下角)位置相邻,只需要一步. 并且建坐标的方法可以按照6条边的方式 #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> using

UVA - 808 Bee Breeding (建立坐标系&amp;找规律)

题目: 输入两个格子的编号a和b(a,b≤10000),求最短距离.例如,19和30的距离为5(一条最短路是19-7-6-5-15-30). 思路: 如图建立坐标系,然后看两个点的向量如果位于二四象限答案为向量坐标绝对值的和,向量位于一三象限答案为向量坐标绝对值的最大值. 看网上的博客的思路--(菜是原罪) 难点是建立坐标系. 代码: #include <bits/stdc++.h> #define inf 0x3f3f3f3f #define MAX 1000000000 #define F

UVa 1531 - Problem Bee

题目:如图所示的蜂巢型的图中,蜜蜂想从A点飞到B点,如果A与B不在同一个正六边形中, 则它先飞到A的中心,每次飞到相邻格子的中心,最后飞到B的中心,再飞到B点: 如果在一个格子中,直接飞过去即可(观察第二组数据). 分析:计算几何.设格子边长为a. 首先观察,所有格子的中心为(3xa/2,sqrt(3)ya/2),其中x.y为整数且奇偶性相同: 因此,根据给定点的坐标,可以求出A,B所在的格子的行列编号(处理奇偶性不同情况): (由于,是取整计算,所以要要判断周围六个格子,是不是比自己更适合):

UVa 808 (建坐标系、找规律) Bee Breeding

题意: 如图,按照图中的规律给这些格子编号.给出两个格子的编号,求从一个格子到另一个格子的最少步数.(一步只能穿过有有公共边的格子) 分析: 根据高中数学知识,选任意两个不共线的向量,就能表示平面上所有点. 像这样建立坐标系,根据图中的规律算出所有点的坐标. 推理也好,找找规律也好,不难发现 第一.三象限的点(x, y)到原点的距离为 |x| + |y| 第二.四象限的点(x, y)到原点的距离为 max{|x|, |y|} 递推点的坐标的时候也是比较注意细节的,否则很容易出错. 1 #incl

UVa 213 Message Decoding(World Finals1991,字符串)

 Message Decoding  Some message encoding schemes require that an encoded message be sent in two parts. The first part, called the header, contains the characters of the message. The second part contains a pattern that represents the message. You must

UVA 1345 Jamie&#39;s Contact Groups

题意: 一些人,和他们可能加入的组号.问每个组,最小的最大人数是多少 分析: 二分的是最大流的容量.设置一个超级源点,连向所有的人,容量为1.设置一个超级汇点,使所有的组连向超级汇点,二分的就是这里的容量(0-n).然后根据题目给出的人和组的关系连接人和组,容量为1.二分时,若当前状态求出的最大流等于人数,则下界等于mid,若不等于,则上界等于mid.二分出的容量,就是组中的最小的最大人数. 输入: 3 2 John 0 1 Rose 1 Mary 1 5 4 ACM 1 2 3 ICPC 0

UVA 562 Dividing coins --01背包的变形

01背包的变形. 先算出硬币面值的总和,然后此题变成求背包容量为V=sum/2时,能装的最多的硬币,然后将剩余的面值和它相减取一个绝对值就是最小的差值. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; #define N 50007 int c[102],d

UVA 10341 Solve It

Problem F Solve It Input: standard input Output: standard output Time Limit: 1 second Memory Limit: 32 MB Solve the equation: p*e-x + q*sin(x) + r*cos(x) + s*tan(x) + t*x2 + u = 0 where 0 <= x <= 1. Input Input consists of multiple test cases and te

UVA 11014 - Make a Crystal(容斥原理)

UVA 11014 - Make a Crystal 题目链接 题意:给定一个NxNxN的正方体,求出最多能选几个整数点.使得随意两点PQ不会使PQO共线. 思路:利用容斥原理,设f(k)为点(x, y, z)三点都为k的倍数的点的个数(要扣掉一个原点O).那么全部点就是f(1),之后要去除掉共线的,就是扣掉f(2), f(3), f(5)..f(n).n为素数.由于这些素数中包括了合数的情况,而且这些点必定与f(1)除去这些点以外的点共线,所以扣掉.可是扣掉后会扣掉一些反复的.比方f(6)在f