列表

详情


NC16732. 序列

描述

有一个长度为n的序列a,已知a[1]=a[n]=1,且对于2 <= x <= n,a[x] / a[x-1]是以下三个数字之一 [ 1,-2,0.5 ],问有多少种不同的序列满足题意。
两个序列不同当且仅当它们有至少一个位置上的数字不同,序列a可以为任何实数。

输入描述

一个整数 表示n (1<= n <= 1e3)

输出描述

一个整数 表示答案模109+7

示例1

输入:

5

输出:

7

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++11(clang++ 3.9) 解法, 执行用时: 6ms, 内存消耗: 4324K, 提交时间: 2018-06-22 19:07:41

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define P 1000000007
int n,c[1005][1005],i,j,ans;
int main()
{
	cin>>n;
	for(i=c[0][0]=1;i<n;i++)for(j=c[i][0]=1;j<=i;j++)c[i][j]=(c[i-1][j]+c[i-1][j-1])%P;
	for(i=0;i<<1<n;i+=2)ans=(ans+(ll)c[n-1][i<<1]*c[i<<1][i])%P;
	cout<<ans<<endl;
	return 0;
}

Python3(3.5.2) 解法, 执行用时: 60ms, 内存消耗: 3664K, 提交时间: 2018-06-23 15:28:26

import math
mod = 1000000007
def c(m, n):
    return math.factorial(m) // math.factorial(n) // math.factorial(m - n) % mod
num = int(input())
ans = 0
n = num - 1
i = 0
while i <= n // 2:
    ans = (ans + c(n, i) * c(n - i, i)) % mod
    i += 2
print(ans)

上一题