题意
求出nnn的排列中是单峰的个数。
思路
设f[i]f[i]f[i]为iii的排列中单峰的个数。
因为iii的排列中iii是峰顶,所以我们把iii插在i−1i-1i−1的左边或右边,这个排列也是单峰的。
那么f[i]=f[i−1]∗2f[i]=f[i-1]*2f[i]=f[i−1]∗2,之后就能发现答案是2n−12^{n-1}2n−1了
代码
#include<cstdio>
const int p = 1e9 + 7;
long long n;
long long power(long long a, long long b) {
long long res = 1;
for (; b; b >>= 1) {
if (b & 1) res = res * a % p;
a = (long long)a * a % p;
}
return res % p;
}
int main() {
scanf("%lld", &n);
printf("%d", power(2, n - 1));
}
本文探讨了如何计算n的排列中属于单峰排列的数量,通过动态规划思想得出f[i]表示i的排列中单峰排列的个数,并推导出最终公式2^(n-1),提供了完整的C++代码实现。
1459

被折叠的 条评论
为什么被折叠?



