zoukankan      html  css  js  c++  java
  • 洛谷P1028 数的计算 题解 动态规划入门题

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

    题目描述

    我们要求找出具有下列性质数的个数(包含输入的自然数 \(n\) ):
    先输入一个自然数 \(n(n \le 1000)\) ,然后对此自然数按照如下方法进行处理:

    1. 不作任何处理;
    2. 在它的左边加上一个自然数,但该自然数不能超过原数的一半;
    3. 加上数后,继续按此规则进行处理,直到不能再加自然数为止.

    输入格式

    1个自然数 \(n(n \le 1000)\)

    输出格式

    1个整数,表示具有该性质数的个数。

    问题分析

    我们可以使用 动态规划 来解决这个问题。
    我们令 \(f[i]\) 表示自然数 \(i\) 能够生成的数的个数,则:
    \(f[i] = 1 + \sum_{j=1}^{n/2} f[j]\)
    实现代码如下:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 1010;
    int n, f[maxn];
    int main() {
        cin >> n;
        for (int i = 1; i <= n; i ++) {
            f[i] = 1;
            for (int j = 1; j <= i/2; j ++)
                f[i] += f[j];
        }
        cout << f[n] << endl;
        return 0;
    }
    

    总结:这是一道动态规划入门题,可以用递推、递归做(不过递归做的时候不要忘了开备忘录)。

  • 相关阅读:
    idea database testconnection 显示灰色
    idea tomcat热部署
    idea 常见报错问题 记录
    Python-Basis-22th
    Python-Basis-21th
    Python-Basis-20th
    Python-Basis-19th
    Python-Basis-18th
    Python-Basis-17th
    Python-Basis-16th
  • 原文地址:https://www.cnblogs.com/quanjun/p/11960270.html
Copyright © 2011-2022 走看看