问题描述
如果一个序列满足下面的性质,我们就将它称为摆动序列:
1. 序列中的所有数都是不大于k的正整数;
2. 序列中至少有两个数。
3. 序列中的数两两不相等;
4. 如果第i – 1个数比第i – 2个数大,则第i个数比第i – 2个数小;如果第i – 1个数比第i – 2个数小,则第i个数比第i – 2个数大。
比如,当k = 3时,有下面几个这样的序列:
1 2
1 3
2 1
2 1 3
2 3
2 3 1
3 1
3 2
一共有8种,给定k,请求出满足上面要求的序列的个数。
输入格式
输入包含了一个整数k。(k<=20)
输出格式
输出一个整数,表示满足要求的序列个数。
样例输入
3
样例输出
8
其实 如果写几个 序列的话 很容易就会想到这个规律 那就是 每一个序列如果把所有的元素都用上组成 摆动序列 只有两种组成状态 所以问题顿时就变的简单 但提示是用动态规划 后面再写一遍 补上吧
int main()
{
long long k;
cin >>k;
if(k==1)
{
cout<<0;
return 0;
}
long long i,j;
long long tem1,tem2;
long long sum=0;
for(i=2;i<=k-1;i++)
{
tem1=1;
for(j=k;j>k-i;j--)
{
tem1*=j;
}
tem2=1;
for(j=1;j<=i;j++)
{
tem2*=j;
}
sum+=tem1/tem2;
}
sum*=2;
sum+=2;
cout <<sum;
return 0;
}