NYOJ469

题目连接:http://acm.nyist.net/JudgeOnline/problem.php?pid=469

思路:很明显这是一道找规律的题 可是这个规律怎么找

那么就要看n的位置放在哪里了

举个例子  比如说n等于5 求f(5);

第二位是2时:后面的四个数正好是2   3  4  5 所以这个排列的个数为 f(5-1);

第二位是3时:第三位可以是2那么后面两位是4   5  所以这个排列的个数为  f(5-3)

第三位是4的时候无结果

第三位是5的时候   只能有一个序列   1    3     5     4     2

综上所述:f(n) = f(n - 1) + f(n - 3) + 1;

下面看代码:

#include<stdio.h>

int main()

{
    int n,a[59] = {0,1,1,2,4};  //数组一定要声明大于55

    for(int i = 5;i < 56;i++)
    {
        a[i] = a[i - 1] + a[i - 3] + 1;
    }
    while(~scanf("%d",&n))
    {
        printf("%d\n",a[n]);
    }
    return 0;
}
//代码很简单   但是需要注意细节
时间: 2024-12-15 06:50:53

NYOJ469的相关文章

动态规划(6)——NYOJ469擅长排列的小明II*

擅长排列的小明 II 描述 小明十分聪明,而且十分擅长排列计算. 有一天小明心血来潮想考考你,他给了你一个正整数n,序列1,2,3,4,5......n满足以下情况的排列: 1.第一个数必须是1 2.相邻两个数之差不大于2 你的任务是给出排列的种数. 输入 多组数据.每组数据中输入一个正整数n(n<=55). 输出 输出种数. 样例输入 4 样例输出 4思路:设这个排列为A:1.A1肯定一直为1,所以A2要么是2要么是3:2.当A2=2时,从A2到An的排列数(2到n)相当于从A1到An-1的排

nyoj469 擅长排列的小明 II

擅长排列的小明 II 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 小明十分聪明,而且十分擅长排列计算. 有一天小明心血来潮想考考你,他给了你一个正整数n,序列1,2,3,4,5......n满足以下情况的排列: 1.第一个数必须是1 2.相邻两个数之差不大于2 你的任务是给出排列的种数. 输入 多组数据.每组数据中输入一个正整数n(n<=55). 输出 输出种数. 样例输入 4 样例输出 4 思路: 由于A1一直是1,所以A2只能是2或3. 1.当A2=2时,从