洛谷 2144 & bzoj1002 [FJOI2007]轮状病毒 题解(找规律)

33 篇文章 0 订阅

原题链接:
洛谷
bzoj

题意简述

给定 n n n,表示有 n + 1 n+1 n+1个点。在 n ( n + 1 ) / 2 n(n+1)/2 n(n+1)/2条边中选择 n n n条,使得原图联通。不同的选法多少?

数据

输入
输出(sb都看的明白。。。mmp不说了)
样例:

输入 3
输出 16

思路

这题是非常有意♂思的题目。

首先暴力 O ( 2 E ) ) O(2^E)) O(2E)),其中 E E E为总边数,它等于 n ( n + 1 ) / 2 n(n+1)/2 n(n+1)/2
事实证明,当 n = 5 n=5 n=5时,就已经很慢了
但是我们珂以耐心等。经过一番等待,得到前 5 5 5项答案:
1 , 5 , 16 , 45 , 121... 1,5,16,45,121... 1,5,16,45,121...
仔细观察:奇数项都是(某个)平方数,偶数项都是(某个)平方数 − 4 -4 4
我们把偶数项加 4 4 4,然后开根:
1 , 9 , 16 , 49 , 121... 1,9,16,49,121... 1,9,16,49,121...
1 , 3 , 4 , 7 , 11.... 1,3,4,7,11.... 1,3,4,7,11....
开根完的数组。。。是个类似 F i b o n a c c i Fibonacci Fibonacci的东西???
f i = f i − 1 + f i − 2 f_i=f_{i-1}+f_{i-2} fi=fi1+fi2,只不过 f 1 f_1 f1 f 2 f_2 f2 F i b o n a c c i Fibonacci Fibonacci略有不同
然后我们递推出这个东西,平方即珂。偶数的话,再减四。
珂是。。。这题要高精???

23333

啥都不说了,来个 P y t h o n ! Python! Python

f=[0]*110
f[1]=1
f[2]=3
for i in range(3,101):
    f[i]=f[i-1]+f[i-2]
for i in range(1,101):
    if (i%2==1):
        f[i]=f[i]*f[i]
    else:
        f[i]=f[i]*f[i]-4

n=int(input())
print(f[n])

回到总题解界面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值