2001NOIP普及组真题 1. 数的计数

线上OJ:

【01NOIP普及组】数的计数

核心思想:

1、样例中给到了 f6 = 6。其实这里包含了 f3=2, f2=2, f1=1, 以及6本身。

注解:按照题意,6前面的数字只能是3,2,1,或者不放(不放就是6本身)

当6前面放3的时候,那3有多少种可能性,就都可以叠加在这里。即 f6 += f3

同理,当6前面放2的时候,2的所有可能性也都叠加在这里 f6 += f2

同理,当6前面放2的时候,2的所有可能性也都叠加在这里 f6 += f1

最后,加上6自己本身,所以

f6 = f3 + f2 + f1 + 1

2、综上所述,我们可以从 f1 开始逐步计算每个 fi,直到 fN(时间复杂度是 O ( 1000 ∗ 1000 ) = O ( 1 0 6 ) O(1000*1000)=O(10^6) O(1000∗1000)=O(106))。

3、最后根据输入的 n,直接输出 fn 即可。

题解代码:
cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

const int N = 1000;
int n, f[N];

int main()
{
    f[1] = 1;  // 初始化 f[1],就只有自己
    for (int i = 2; i <= N; i++)
    {
        int x = i / 2;  // 针对每一个i,找到它不能超过的一半
        for(int j = 1; j <= x; j++)
            f[i] += f[j];   // 累加
        
        f[i]++;  // 最后加上自己    
    }    

    scanf("%d", &n);    
    printf("%d", f[n]);
    return 0 ;
}
相关推荐
灯澜忆梦20 分钟前
【面向对象编程C++】| 基础语法
java·c++·算法
小蒋观天下28 分钟前
专项方案:大场景港口AI安防、多干扰环境下的算法调优与落地实操
人工智能·深度学习·算法·安全·机器学习·计算机视觉·ai大模型
Evand J36 分钟前
【电机滤波例程5】渐消因子自适应扩展卡尔曼滤波(EKF),MATLAB。PMSM负载突变下的状态估计。附下载链接
算法·matlab
H.莓飛1 小时前
【数据结构】二叉树_OJ题
linux·开发语言·数据结构·算法
好想像大佬一样能够ak所有2 小时前
Leetcode35.搜索插入位置
数据结构·算法·leetcode
aqiu1111112 小时前
【C++算法打怪专栏】LeetCode 165. 比较版本号(双指针与字符串流法)
c++·算法·leetcode
黄金龙PLUS2 小时前
如何基于置换算法来设计对称加密算法
算法·网络安全·密码学·哈希算法·同态加密
不会就选b2 小时前
算法日常・每日刷题--<动态规划>14
算法
赛博守夜人2 小时前
跨境业务与出海合规之九:海外买量投放与营销虚假流量(Ad Fraud):跨国机房群控与归因欺诈识别算法
算法·安全
chenbingjie_c2 小时前
C++ STL 适配器:stack & queue,从 vector/list 到 deque 深度解析
数据结构·c++