动态规划dp(三个案例详解)

简介: 动态规划dp(三个案例详解)

一、对于dp的理解:


dp(Dynamic programming)即动态规划的简写。动态规划的思想是找出大问题对应的子问题,通过若干子问题寻找解决这个大问题的递推公式或者方法的思想即大化小,小化更小。例如求第n个斐波那契数就需要求出n-1与n-2的斐波那契数字往前一步一步推导出第n个数。

二、寻找的三个指标


  1. 定义状态(f(n)表示什么)
  2. 寻找转移方程(f(n)= xx  xx)
  3. 设置初始值(f(0)=  x ,f(1) =  y)

通过这三个指标就可以一步步得到f(n)的值。

三、三个例子


1、斐波那契


       在数学上,斐波纳契数列以如下递归方式被定义:F(0)=1 , F(1)=1 , … , F(n)=F(n-1)+F(n-2)(n≥2,n∈N+)根据定义,其前十项为1, 1, 2, 3, 5, 8, 13, 21, 34, 55。给出一个编程问题:输入一个自然数n,要求输出斐波那契数列的第(0≤n≤1000000)。

我们先找出这个问题的三个指标

思路:每一个斐波那契数字都等于前两个数字的和。

  • 定义状态                 f(n) 表示第n个斐波那契数;
  • 寻找转移方程         f(n) = f(n-1) + f(n-2);
  • 设置初始值             f(0) = 1 , f(1) = 1;
public int Fibonacci(int n)
{
  if(n==0 || n==1) return 1;
  else return Fibonacci(n-1)+Fibonacci(n-2);
}

2、青蛙跳台阶


一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

我们先找出这个问题的三个指标

思路:将跳台阶问题反过来看,看最后一个台阶的跳法:倒数第一个台阶的跳法(最后跳一步)+倒数第二个台阶的跳法(最后直接跳两步。分别跳两步倍包含在跳倒数最后一个的跳法里了)。

  • 定义状态                f(n) 表示第n个台阶的跳法
  • 寻找转移方程         f(n) = f(n-1) (倒数第一个台阶的跳法)+ f(n-2)(倒数第二个台阶的跳法)
  • 设置初始值             f(0) = 1 , f(1) = 1 , f(2) = 2;
public int jumpFloor(int target) {
        int[] dp = new int[target+1];
        // 由于从0到1只有一种,而从0到2有0>1>1和0>2两种,初始化边界使之满足dp
        dp[0] = 1;
        dp[1] = 1;
        for (int i = 2; i <= target; i++){
            dp[i] = dp[i-1] + dp[i-2];
        }
        return dp[target];
    }

四、放格子的问题

将n个21的方块放在大小为2n大小的格子内,求当长度为n时候放的方法有几种

我们先找出这个问题的三个指标

思路:最后的格子可以横着放2个方块或者竖着放一个,我们就求这两个方法的和就是总的放方块的方法数

  • 定义状态                f(n) 表示长为n的方格放的方法
  • 寻找转移方程         f(n) = f(n-1) + f(n-2)
  • 设置初始值             f(0) = 1 , f(1) = 1 , f(2) = 2;
public int num(int n) {
        int[] dp = new int[n+1];
        dp[0] = 1;
        dp[1] = 1;
        for (int i = 2; i <= n; i++){
            dp[i] = dp[i-1] + dp[i-2];
        }
        return dp[n];
    }


相关文章
|
7天前
|
缓存 人工智能 自然语言处理
我对比了8个Claude API中转站,踩了不少坑,总结给你
本文是个人开发者耗时1周实测的8大Claude中转平台横向评测,聚焦Claude Code真实体验:以加权均价(¥/M token)、内部汇率、缓存支持、模型真实性及稳定性为核心指标。
3108 20
|
19天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
17153 54
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
15天前
|
人工智能 JavaScript Ubuntu
低成本搭建AIP自动化写作系统:Hermes保姆级使用教程,长文和逐步实操贴图
我带着怀疑的态度,深度使用了几天,聚焦微信公众号AIP自动化写作场景,写出来的几篇文章,几乎没有什么修改,至少合乎我本人的意愿,而且排版风格,也越来越完善,同样是起码过得了我自己这一关。 这个其实OpenClaw早可以实现了,但是目前我觉得最大的区别是,Hermes会自主总结提炼,并更新你的写作技能。 相信就冲这一点,就值得一试。 这篇帖子主要就Hermes部署使用,作一个非常详细的介绍,几乎一步一贴图。 关于Hermes,无论你赞成哪种声音,我希望都是你自己动手行动过,发自内心的选择!
3131 29
|
4天前
|
人工智能 测试技术 API
阿里Qwen3.6-27B正式开源:网友直呼“太牛了”!
阿里云千问3.6系列重磅开源Qwen3.6-27B稠密大模型!官网:https://t.aliyun.com/U/JbblVp 仅270亿参数,编程能力媲美千亿模型,在SWE-bench等权威基准中表现卓越。支持多模态理解、本地部署及OpenClaw等智能体集成,已开放Hugging Face与ModelScope下载。
|
3天前
|
机器学习/深度学习 缓存 测试技术
DeepSeek-V4开源:百万上下文,Agent能力比肩顶级闭源模型
DeepSeek-V4正式开源!含V4-Pro(1.6T参数)与V4-Flash(284B参数)双版本,均支持百万token上下文。首创混合注意力架构,Agent能力、世界知识与推理性能全面领先开源模型,数学/代码评测比肩顶级闭源模型。
1631 6
|
3天前
|
人工智能 JSON BI
DeepSeek V4 来了!超越 Claude Sonnet 4.5,赶紧对接 Claude Code 体验一把
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro 的真实体验与避坑记录 本文记录我将 Claude Code 对接 DeepSeek 最新模型(V4Pro)后的真实体验,测试了 Skills 自动化查询和积木报表 AI 建表两个场景——有惊喜,也踩
1406 6