动态规划(DP)及推荐博文

今天的博文就水一点吧。

动态规划(Dynamic Programming,简称DP)是一种通过把原问题分解为相对简单的子问题的方式来求解复杂问题的方法。

动态规划的主要特点

  • 最优子结构:如果一个问题的最优解包含其子问题的最优解,则这个问题具有最优子结构性质。
  • 重叠子问题:在求解过程中,很多子问题被重复计算。动态规划通过存储这些子问题的解来避免重复计算。

动态规划的基本步骤

  1. 定义状态:确定子问题以及如何用子问题的解构建原问题的解。
  2. 状态转移方程:描述不同状态之间的关系,即如何从一个或多个子问题的状态转移到另一个状态。
  3. 初始化:设定边界条件,通常是初始状态的值。
  4. 计算顺序:决定计算各个状态的顺序,确保在计算某个状态时,所有依赖的状态都已经被计算过。
  5. 返回结果:根据题目要求返回最终的结果。

适用场景

动态规划适用于以下情况:

  • 问题可以分解为相互独立且离散的子问题。
  • 子问题之间存在重叠,即相同的子问题会被多次使用。
  • 需要找到全局最优解而不是局部最优解。

动态规划算法经常优于搜索算法(爆搜)(DFS、BFS)、递归等,但也不是无所不能。

思维导图(以斐波那契额数列为例)

动态规划(DP)及推荐博文_第1张图片

DP求斐波那契数列的第i项

根据斐波那契额数列的定义,我们就能知道以下状态转移方程:

f[i]=f[i-1]+f[i-2]

示例C++代码:(高精度不在本文所讲述的范围内,非dalao请自行查阅资料,dalao轻喷)

#include 
#define int long long
#define MAXN 100
// 斐波那契额数列的第93项会超出C++的long long范围,再大就需要使用__int128类型甚至是高精度算法。
int f[MAXN], n;
int fibonacciSequence(int n)
{
    if (n >= 93)
    {
        printf("斐波那契额数列的第i项超出了64位有符号整数(long long)范围,无法计算。");
        return -1;
        // 注:如果运行时出现乱码,去搜索一下吧。(加上system("chcp 65001");或修改编译命令试一试)
        // 英语机翻: The i-th term of the Fibonacci sequence exceeds the range of 64 signed integers (long long) and cannot be calculated.
    }
    if (n <= 1)
    {
        return n;
    }
    f[0] = 0;
    f[1] = 1;
    for (int i = 2; i <= n; ++i)
    {
        f[i] = f[i - 1] + f[i - 2];
    }
    return f[n];
}

int main()
{
    scanf("%lld", &n);
    printf("%lld",fibonacciSequence(n));
}

背包问题

01背包问题

完全背包问题

多重背包问题

分组背包问题

线性动态规划问题

区间动态规划问题

推荐博文

这CSDN的链接是真难用

nullhttps://blog.csdn.net/xdnxl/article/details/126735355

DP 详解-CSDN博客文章浏览阅读5.4k次,点赞42次,收藏78次。DP 问题在 OIer 中很受欢迎,因为每个 DP 问题在某种意义上都是原创的,你必须努力思考其状态和状态转移方程才能为其发明解决方案。由于动态规划如此受欢迎,它可能是算法竞赛中最重要的掌握方法。DP(Dynamic programming,全称动态规划),是一种基于分治,将原问题分解为简单子问题求解复杂问题的方法。动态规划的耗时往往远少于朴素(爆搜)解法。很简单的名字,即为使用空间的代价来确保不会超时。分类讨论就是分类 --> 讨论!_dphttps://blog.csdn.net/George110915/article/details/142066029

动态规划入门(DP)_dp动态规划-CSDN博客https://blog.csdn.net/a111737289291/article/details/136000519nullhttps://blog.csdn.net/2301_79558858/article/details/137546255


动态规划入门(DP)_dp动态规划-CSDN博客https://blog.csdn.net/a111737289291/article/details/136000519

你可能感兴趣的:(动态规划,算法)