题意简述
给定 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=fi−1+fi−2,只不过
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])