【递推】JZOJ_4742 单峰

题意

求出 n n n的排列中是单峰的个数。

思路

f [ i ] f[i] f[i] i i i的排列中单峰的个数。
因为 i i i的排列中 i i i是峰顶,所以我们把 i i i插在 i − 1 i-1 i1的左边或右边,这个排列也是单峰的。
那么 f [ i ] = f [ i − 1 ] ∗ 2 f[i]=f[i-1]*2 f[i]=f[i1]2,之后就能发现答案是 2 n − 1 2^{n-1} 2n1

代码

#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));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值