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 ;
}
相关推荐
凯瑟琳.奥古斯特8 分钟前
动态调优IoU提升OCR文本合并精度
开发语言·python·算法
布莱克60531 分钟前
A* 算法详解:从原理到实现
开发语言·c++·算法
多弗朗皮卡丘31 分钟前
C++ 智能指针
开发语言·c++·c++11·智能指针
段一凡-华北理工大学37 分钟前
高炉炼铁机器视觉与智能识别十八讲~系列文章15:可靠性篇:防误报、容错与识别系统的鲁棒性设计
人工智能·算法·机器学习·高炉大模型·高炉机器视觉·高炉炼铁模型开发
进化中的刀盾兽1 小时前
从零实现 C++ AI 大模型接入 SDK(十):SessionManager 会话管理与多轮对话实现
c++
小成202303202651 小时前
C++~02运算符重载
开发语言·c++
某林2121 小时前
局部路径规划器 DWB:速度采样与评分权重的取值分析
人工智能·算法·架构·机器人·技术复盘
AI职业加油站1 小时前
模数共振行动解读|大模型应用工程师证书,匹配行业 RAG/Agent 落地人才需求
人工智能·学习·算法·职场和发展·职场发展
郑同学的笔记2 小时前
【c++随笔30】C++ 注册回调函数
开发语言·c++
lengxuenong2 小时前
树状数组 · 信息学学习手册2-离散化与逆序对
c++·学习·算法