Time Limit: 1 Sec Memory Limit: 128 Mb
Description
给定一个初始序列,序列中仅包含一个元素 n(1≤n≤1000)。重复以下步骤:
- 不做任何处理;
- 在序列的最左边插入一个正整数,但是这个正整数不能超过序列当前首元素的一半;
请问通过这样的规则,可以构造出多少个不同的序列。
Input
1 个正整数 n ( n ≤ 1000 )
Output
1 个整数,表示能够生成的序列个数。
Sample Input
6
Sample Output
6
Hint
当n=6,满足条件的序列为
{6},
{1, 6},
{2, 6},
{1, 2, 6},
{3, 6},
{1, 3, 6}
代码实现
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <iostream>
#include <algorithm>
using namespace std;
int a[1001];
/*
递推要找前后关系,算出6之前的数字一共有多少集合
开方后向下取整
a[1]=1 <- {1}
a[2]=1+a[1] <- {2}, {1,2}
a[3]=1+a[1] <- {3}, {1,3}
a[4]=1+a[1]+a[2] <- {4}, {1,4}, {2,4}, {1,2,4}
a[6]=1+a[1]+a[2]+a[3]
*/
int main()
{
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
a[i] = 1;//初始化先+1
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= i / 2; j++)
{
a[i] += a[j];
}
}
printf("%d\n", a[n]);
return 0;
}