BZOJ [FJOI2007]轮状病毒 (找规律)

时间:2021-04-20 08:35:09

1002: [FJOI2007]轮状病毒

Time Limit: 1 Sec  Memory Limit: 162 MB
Submit: 6009  Solved: 3282
[Submit][Status][Discuss]

Description

  轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的。一个N轮状基由圆环上N个不同的基原子
和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道。如下图所示

BZOJ [FJOI2007]轮状病毒 (找规律)

  N轮状病毒的产生规律是在一个N轮状基中删去若干条边,使得各原子之间有唯一的信息通道,例如共有16个不
同的3轮状病毒,如下图所示

BZOJ [FJOI2007]轮状病毒 (找规律)
  现给定n(N<=100),编程计算有多少个不同的n轮状病毒

Input

  第一行有1个正整数n

Output

  计算出的不同的n轮状病毒数输出

Sample Input

3

Sample Output

16

HINT

 

Source

析:找规律,首先可以暴力找出前几项,是 1 5 16 45 121 320,规律很容易能看出来是 f[n] = 4 * f[n-1] - 4 * f[n-2] + f[n-3]

由于数据比较大,高精度,可以用python来解决。

n = input()
f1 = int(1)
f2 = int(5)
f3 = int(16)
if n == 1: print 1
elif n == 2: print 5
elif n == 3: print 16
else:
f = int(0)
for i in range(3, n, 1):
f = 4 * f3 - 4 * f2 + f1
f1 = f2
f2 = f3
f3 = f
print f