【问题描述】 小明想知道,满足以下条件的正整数序列的数量:
- 第一项为 n;
- 第二项不超过 n;
- 从第三项开始,每一项小于前两项的差的绝对值。 请计算,对于给定的 n,有多少种满足条件的序列。
【输入格式】 输入一行包含一个整数 n。
【输出格式】 输出一个整数,表示答案。答案可能很大,请输出答案除以10000的余数。
【样例输入】
4
【样例输出】
7
【样例说明】
以下是满足条件的序列:
4 1
4 1 1
4 1 2
4 2
4 2 1
4 3
4 4
最开始做这道题的时候,最先想到的是用递归的方式解决这道题,但是写完代码后发现测试的样例范围很大,这样的方法只能过一般的评测。
#include <iostream>
#include <cmath>
using namespace std;
int pre=0,sum=0,a[1001]={
0},book[1001]={
0};
void search(int n,int deep)
{
int i,j,len;
if(deep==2)
{
for(i=1;i<=n;i++)
{
pre=n;
/*
a[1]=4;
a[deep]=i;
for(j=1;j<=deep;j++)
{
cout<<a[j]<<" ";
}
cout<<endl;
*/
sum++;
search(i,deep+1);
}
}
len=abs(pre-n);
if(deep>2)
{
for(i=1;i<len;i++)
{
pre=n;
/*
a[deep]=i;
for(j=1;j<=deep;j++)
{
cout<<a[j]<<" ";
}
cout<<endl;
*/
sum++;
search(i,deep+1);
}
}
return;
}
int main()
{
int n;
cin>>n;
search(n,2);
cout<<sum%10000<<endl;
return 0;
}