美文网首页
07 洛谷 P1028 数的计算(递归+DP)

07 洛谷 P1028 数的计算(递归+DP)

作者: _Mirage | 来源:发表于2020-07-23 20:20 被阅读0次

题目链接

image.png

明显的递归问题。
分析:

  1. 边界条件: n = 1,返回1

  2. 状态转移方程:
    f(n) = f(1) + f(2) + ... + f(n / 2) + 1

不用动态规划(存在很多重复状态): image.png
使用动态规划减少重复计算: image.png

代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;

int dp[1002];

// 动态规划
int total_numbers(int n) {
    if (n == 1) return 1;
    int sum = 1;
    if (dp[n]) return dp[n];
    for (int i = 1; i <= n / 2; i++) {
        sum += total_numbers(i);
    }
    return dp[n] = sum;
}

// 非动态规划
int total_numbers_2(int n) {
    if (n == 1) return 1;
    int sum = 1;
    for (int i = 1; i <= n / 2; i++) {
        sum += total_numbers(i);
    }
    return sum;
}

void solve(int n) {
    printf("%d", total_numbers(n));
    // printf("%d", total_numbers_2(n));
}

int main(int argc, char const *argv[])
{
    int n;
    scanf("%d", &n);
    solve(n);

    return 0;
}
运行结果: image.png

相关文章

  • 07 洛谷 P1028 数的计算(递归+DP)

    题目链接 明显的递归问题。分析: 边界条件: n = 1,返回1 状态转移方程:f(n) = f(1) + f(2...

  • 洛谷P1028数的计算

    题面 题目大意 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n <= 1000)...

  • 洛谷题解P1028 数的计算

    一、题目 https://www.luogu.org/problemnew/show/P1028 二、代码 少儿编...

  • 方格取数 洛谷1004 dp

    设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0。如下图所示(见样例...

  • P1028 数的计算

    题目描述:我们要求找出具有下列性质数的个数(包含输入的自然数n):先输入一个自然数n(n<=1000),然后对此自...

  • Leetcode.279.Perfect Squares

    题目 找到一个数最少由多少个完美数组成。完美数:n²。 思路 要么递归,要么DP。明显DP是一个不错的选择。dp[...

  • 动态规划总结

    1.dp[i]表示以A[i]结尾的最值 例子1:最大连续子序列和(洛谷P3009)dp[i]=max(dp[i-1...

  • 【洛谷】DP-过河卒

    一、题目 二、做题总结 本题之前在ZSC上是做过的,当初用的是DFS深度搜索,这次在洛谷上还是原来的思路,却被提示...

  • 70. Climbing Stairs

    经典递归,dp[i] = dp[i-1]+dp[i-2],从0 算到n-1 ,返回dp[n-1] dp[0] = ...

  • 常用面试代码小Demo

    java递归的简单实现方式 递归计算100以内的数累计求和 记住:使用递归的时候,递归方法一定要有结束条件 单例模...

网友评论

      本文标题:07 洛谷 P1028 数的计算(递归+DP)

      本文链接:https://www.haomeiwen.com/subject/rmfklktx.html