您的位置:首页 > 其它

Nyoj 469 擅长排列的小明 II

2014-03-26 16:05 260 查看
/**

由于第一个只能是1,则第二个数只能是2,3
当第二个数是2时,则相当于是对2-n的排列,相当于对1-(n-1)的排列,即arr[n-1];
当第二个数是3时,第三个数只能是2,4,5
此时,当第三个数为2时,则是对3-n的排列,相当于对1-(n-3)的排列,即arr[n-3]
   当第三个数为4时,此时,第四个数只能是2,除了n等于4时,对于n大于4的排列,都不符合要求,
   而n为4时,与第三个数为5时的排列相同,所以, 可认为第三个数为4时不符合要求,
   当第三个数为5时,只有一种情况,1,3,5,6,7,9,……,10,8,6,4,2,因为前面1,3,5都是奇数,2只能和4相邻了(1,3被隔开),而且无论n为多少,2都在最后
所以,arr
= arr[n-1] + arr[n-3] + 1.

*/
#include <iostream>
#include <cstdio>

using namespace std;

const int MAXN = 60;

int arr[MAXN];

void Pre_Slove()
{
arr[0] = 0;
arr[1] = 1, arr[2] = 1, arr[3] = 2;
for(int i = 4; i < MAXN; ++i)
arr[i] = arr[i-1] + arr[i-3] + 1;
}

int main()
{
int n;
Pre_Slove();
while(~scanf("%d", &n))
{
printf("%d\n",arr
);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: