题目描述
求n的全排列中有多少个单峰数列
思路
推一推小的数据可以发现答案是
2
n
−
1
2 ^ {n - 1}
2n−1
正经的
峰顶的数为n
那么它左边多数可以有0个,也可以有n-1个
那么就是
C
(
n
−
1
,
0
)
+
C
(
n
−
1
,
1
)
+
.
.
.
+
C
(
n
−
1
,
n
−
1
)
C(n - 1, 0) + C(n - 1, 1) + ... + C(n - 1, n - 1)
C(n−1,0)+C(n−1,1)+...+C(n−1,n−1)
根据性质得
2
n
−
1
2 ^ {n - 1}
2n−1
代码
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#define ll long long
using namespace std;
const ll mo = 1e9 + 7;
ll n;
ll power(ll a, ll b)
{
ll Ans = 1;
a %= mo;
while(b)
{
if(b & 1)Ans = Ans * a % mo;
a = (a * a) % mo;
b >>= 1;
}
return Ans;
}
int main()
{
scanf("%lld", &n);
printf("%lld", power(2, n - 1));
return 0;
}