首页 > 其他分享 >洛谷题单指南-递推与递归-P1028 [NOIP2001 普及组] 数的计算

洛谷题单指南-递推与递归-P1028 [NOIP2001 普及组] 数的计算

时间:2024-02-05 15:34:01浏览次数:32  
标签:count NOIP2001 递归 int 洛谷题 long P1028 递推 数列

原题链接:https://www.luogu.com.cn/problem/P1028

题意解读:给定n,构造数列,可以用递归或者递推。

解题思路:

1、递归

定义count(n)返回数列的个数

  n==1时,count(n) = 1

  n!=1时,count(n) = 1 + count(1) + count(2) + ...+ count(n/2)

注意,递归会导致大量重复计算,需要用一个hash数组来避免重复计算,否则会超时

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 3005;

long long f[N];

int n;

long long count(int n)
{
    if(f[n]) return f[n]; //如果count(n)已经计算过,直接返回结果
    if(n == 1) return 1;
    long long res = 1;
    for(int i = 1; i <= n / 2; i++)
    {
        res += count(i);
    }
    f[n] = res; //将count(n)的值保存下来,避免重复计算
    return res;
}

int main()
{
    cin >> n;
    cout << count(n);
    return 0;
}

2、递推

我们看n = 6,数列为:

6

6,1

6,2

6,3

6,2,1

6,3,1

n = 5时,数列为:

5

5,1

5,2

5,2,1

相比n=6,缺少了n=3的数列

n=4时,数列为:

4

4,1

4,2

4,2,1

与n=5时一样。

因此,可以推断,令f[i]为i的数列数量

当i是偶数时,f[i] = f[i - 1] + f[i / 2]

当i是奇数时,f[i] = f[i - 1]

初始值f[1] = 1

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 3005;

long long f[N];
int n;

int main()
{
    cin >> n;
    f[1] = 1;
    for(int i = 2; i <= n; i++)
    {
        if(i % 2 == 0) f[i] = f[i - 1] + f[i / 2];
        else f[i] = f[i - 1];
    }
    cout << f[n];
}

 

标签:count,NOIP2001,递归,int,洛谷题,long,P1028,递推,数列
From: https://www.cnblogs.com/jcwy/p/18008265

相关文章

  • 洛谷题单指南-递推与递归-P1044 [NOIP2003 普及组] 栈
    原题链接:https://www.luogu.com.cn/problem/P1044题意解读:一组数入栈、出栈的方案数,如果了解卡特兰数,此题可以秒杀;如果不了解,也可以通过递归或者递推来解决;最次,可以通过DFS暴搜出方案数,当然对于n个数,一共有n次入栈、n次出栈,一共2n次,每次要么入栈要么出栈,总搜索次数在22n规模,n最......
  • 洛谷题单指南-递推与递归-P1002 [NOIP2002 普及组] 过河卒
    原题链接:https://www.luogu.com.cn/problem/P1002题意解读:从A(0,0)点走到B(n,m)点,只能向右或者向下,C点以及其控制点不能走。解题思路:根据题意,此题要么递归(DFS),要么递推(动态规划)先分析数据规模,最大从起点到终点要走40步,每个步有2种走法,一共240种路径,DFS会超时,且方案数必须用longlong......
  • 洛谷题解-P1194 买礼物
    https://www.luogu.com.cn/problem/P1194题目描述又到了一年一度的明明生日了,明明想要买BBB样东西,巧的是,这BBB样东西价格都是AAA元。但是,商店老板说最近有促销活动,也就是:如果你买了第III样东西,再买第JJJ样,那么就可以只花KI,JK_{I,J}KI,J​元,更巧的是,KI,JK_{I,J}K......
  • 洛谷题单指南-暴力枚举-P2392 kkksc03考前临时抱佛脚
    原题链接:https://www.luogu.com.cn/problem/P2392题意解读:由于可以同时计算两道同一科的题目,只需要把某一科题目分两堆,使得两堆总时长之差最小,时长较大的一堆就是完成这一科的最短时间。解题思路:既然直到了要把一科题目分两堆,关键是如何分堆呢?比较容易犯的错是用贪心来解题:把......
  • 洛谷题单指南-暴力枚举-P3799 妖梦拼木棒
    原题链接:https://www.luogu.com.cn/problem/P3799题意解读:要选四根木棒拼成等边三角形,必然有两根长度相等,其余两根长度之和等于前两根解题思路:木棒总数最大100000,每根最长5000,因此通过枚举其中两根木棒的长度,计算出另外两根的长度,通过各个长度的木棒数进行选择。设数组h[n]保......
  • 洛谷题单指南-暴力枚举-P1149 [NOIP2008 提高组] 火柴棒等式
    原题链接:https://www.luogu.com.cn/problem/P1149题意解读:计算符合A+B=C时,火柴棍数量正好等于n,可以采用枚举A、B,然后计算出C,根据A、B、C计算出所有火柴棍数量,再加上4根加号、等号的,如果与n相等,即为一种合法等式。解题思路:题目的关键在于枚举A、B时,最大值的设定,不能超时。分析......
  • 洛谷题单指南-暴力枚举-P1217 [USACO1.5] 回文质数 Prime Palindromes
    原题链接:https://www.luogu.com.cn/problem/P1217题意解读:本题要找[a,b]范围内的所有回文质数,千万不要被题目提示所干扰,如果按照提示先产生各个长度的回文数,再依次判断是否是素数,程序写起来比较繁琐,需要根据a、b的长度,写8个判断是否产生1~8位回文数,最后做素数判断。换一个思路......
  • 洛谷题单指南-暴力枚举-P3654 First Step (ファーストステップ)
    原题链接:https://www.luogu.com.cn/problem/P3654题意解读:在r*c矩阵中,找连续k个.的总数。解题思路:本题直接枚举即可,在每一行中,以每一列为起点,连续判断k个元素,如果全为'.',则方案数加1在每一列中,以每一行为起点,连续判断k个元素,如果全为'.',则方案数加1注意:如果k=1,只有一个人......
  • 洛谷题单指南-暴力枚举-P3392 涂国旗
    原题链接:https://www.luogu.com.cn/problem/P3392题意解读:此题枚举白、蓝、红所有可能的行数组合,依次逐行判断每个方格,是否需要染色,计算最少的染色次数即可。解题思路:总行数是n,先考虑白色,第一行必是白色,最后一行必是红色,至少有一行蓝色,因此白色行数的范围是1~n-2再考虑蓝......
  • 洛谷题单指南-暴力枚举-P1088 [NOIP2004 普及组] 火星人
    原题链接:https://www.luogu.com.cn/problem/P1088题意解读:火星人的手指可以通过全排列来表示数字,全排列由小到大的顺序即为表示的数字大小,题目可以转化为:给定按顺序全排列中的某一个排列,求往后数m个排列的内容。解题思路:此题与经典全排列问题的差异在于,需要从指定一个排列开......