动态规划基础

动态规划

1、动态规划的概念

        简称DP,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。常常适用于有重叠子问题和最优子结构性质的问题。

        简单来说,就是给定一个问题,把它拆成一个个子问题,查到子问题可以直接解决。然后把子问题答案保存起来,以减少重复计算。再根据子问题答案反推,得出原问题解的一种方法。

核心思想在于拆分子问题,记住过往,减少重复计算。

2、动态规划的步骤

  1. 划分子问题
  2. 状态表示,一般用数组dp[i]表示当前状态
  3. 状态转移,即当前状态是由前面那些状态转移过来的,例如dp[i]=dp[i-1],表示当前状态可以由上一个状态转移过来
  4. 确定边界,确定初始状态

一、线性DP

1、线性DP的概念

        动态规划中的一类问题,指状态之间有线性关系的动态规划问题。所谓线性DP,就是递推方程是有一个明显的线性关系的,一维线性和二维线性都有可能。在求的时候,一行一行地来求

例题----取钱

        https://www.lanqiao.cn/problems/3297/learning/

        黄开的银行最近又发行了一种新面额的钞票面值为4,所以现在黄有5种面额的钞票,分别是20,10,5,4,1。但是不变的是他小气,现在又有很多人来取钱,黄又不开心了,请人来取钱,黄又不开心了,请你算出每个来取钱的人黄应该给他至少多少张钞票。

输入格式:每个测评数据含有不超过10组输入,每组给出一个n(1<=n<=10000),n为要取出的金额。

输出格式:每组样例输出一个答案(钞票数)。

示例:20                                     1

           2                                       2

           6                                       2

提示:

        设置dp[i]数组 取出金额为i

        最小钞票数 转移方程为:dp[i]=Math.min(dp[i-1],dp[i-4],dp[i-5],dp[i-10],dp[i-20])+1

import java.util.Arrays;
import java.util.Scanner;


public class Main {
public static void main(String[] args) {
           Scanner sc = new Scanner(System.in);
           int[] arr = { 1, 4, 5, 10, 20 };
           int[] dp = new int[10001]; // 索引为金额, 值为方案数
           Arrays.fill(dp, 10000);
           dp[0] = 0; // 0金额的可选方案数量为0个
           for (int i = 1; i < dp.length; ++i) { // 枚举子问题金额数
                for (int j : arr) { // 每个子问题可选方案
                    if (i >= j) { // 当金额大于等于面额时
                        dp[i] = Math.min(dp[i - j]

相关推荐

  1. 动态规划基础

    2024-04-04 15:14:01       62 阅读
  2. 动态规划基础

    2024-04-04 15:14:01       46 阅读
  3. 动态规划基础

    2024-04-04 15:14:01       44 阅读
  4. dp动态规划基本

    2024-04-04 15:14:01       45 阅读
  5. 动态规划基础知识点(包含文档)

    2024-04-04 15:14:01       44 阅读
  6. 动态规划】【背包问题】基础背包

    2024-04-04 15:14:01       43 阅读
  7. 【算法基础】第五章:动态规划

    2024-04-04 15:14:01       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-04 15:14:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-04 15:14:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-04 15:14:01       87 阅读
  4. Python语言-面向对象

    2024-04-04 15:14:01       96 阅读

热门阅读

  1. 编程基础---C/C++基础知识

    2024-04-04 15:14:01       37 阅读
  2. 一些常见的k8s问题和答案

    2024-04-04 15:14:01       32 阅读
  3. 面试前端八股文十问十答第七期

    2024-04-04 15:14:01       32 阅读
  4. 设计模式之职责链模式(下)

    2024-04-04 15:14:01       41 阅读
  5. WPS二次开发系列:WPS SDK初始化

    2024-04-04 15:14:01       43 阅读
  6. HTML中js简单实现石头剪刀布游戏

    2024-04-04 15:14:01       37 阅读
  7. Husky使用简明教程

    2024-04-04 15:14:01       40 阅读
  8. python将visio转换为 PDF 文件

    2024-04-04 15:14:01       32 阅读
  9. 小于电商开放平台-订单线下发货

    2024-04-04 15:14:01       35 阅读
  10. MySQL数据库下载及安装教程(Windows、Linux)

    2024-04-04 15:14:01       40 阅读