HDU 2048 数塔

问题描述

题目链接-点我查看题目

  给出一个数塔,要求从顶层走到底层,每一步只能从高层走到相邻的低层节点,求经过的结点的数字之和最大是多少?

动态规划的定义

  dynamic programming is a method for solving a complex problem by breaking it down into a collection of simpler subproblems.

  动态规划是通过拆分问题,定义问题状态和状态之间的关系,使得问题得以递推(或者说分治)的方式去解决。

  对于动态规划,大家可能会产生一些误解,将重点放在如何递推的求解问题,但如何拆分问题,才是动态规划的核心。而拆分问题,靠的就是状态的定义状态转移方程的定义

1、状态的定义

  首先,我们假设使用一个二维数组dp来表示这个数塔,类似这样:

  7 0 0 0 0

  3 8 0 0 0

  8 1 0 0 0

  2 7 4 4 0

  4 5 2 6 5

  数组中数塔之外的地方我们将数值填充为0,其中\(dp[0][0]\)表示数塔最顶部,\(dp[1][0]\)和\(dp[1][1]\)分别表示\(dp[0][0]\)下一层的左右两个相邻结点。



  状态定义之前,我们首先需要进行问题的定义子问题的定义

  有人可能会问了,题目都已经在这了,我们还需定义这个问题吗?需要,原因就是这个问题在字面上看,找不出子问题,而没有子问题,这个题目就没办法解决。

  所以我们来重新定义这个问题:

  • 给定一个 \(I * J\) 大小的二维数组 \(dp\)
  • 设 \(F_{i,j} (i<I,j<J)\) 为\(dp[i][j]\) 结点到达底部所经过结点的最大数字之和
  • 求 \(F_{0,0}\) 的值为多少

  如此,以上的\(F{i,j}\) 就是我们所说的状态,定义中的“\(F_{i,j}\)为\(dp[i][j]\)结点到达底部所经过结点的最大数字之和“就是我们所说的状态的定义

  对于 \(F_{i,j}\) 来讲,\(F_{i+1,j}\) 和 \(F_{i+1,j+1}\) 就是\(F_{i,j}\)的子问题:因为 \(dp[i][j]\) 结点往下一层结点走的时候只有这两个相邻的结点可以选择

2、状态转移方程

  上述状态定义好之后,状态和状态之间的关系式,就叫做状态转移方程

  在上一步我们得到了状态的定义:

\(F_{i,j}\)为\(dp[i][j]\)结点到达底部所经过结点的最大数字之和

  则状态转移方程为:

\(F_{i,j}\) = \(dp[i][j]\) + \(max(F_{i+1,j},F_{i+1,j+1})\)

  用语言解释一下就是:往下一层走的时候,选择两个结点中状态值最大的那一个

  因为最底层的状态值就是本身的值,所以,我们就可以通过该方程从最底层一直往上递推,求得最高层的解

  这里可以看出,状态转移方程就是定义了问题与子问题之间的关系,也可以看出,状态转移方程就是一个带有条件判断的递推式。

总结

  总的来说,动态规划是一种解决问题的观察角度,让问题能够以递推的方式来解决。所以,如何分析问题,才是动态规划的重点

  最后,附上我之前的解题报告:解题报告链接-点我查看解题报告

通过 HDU 2048 来初步理解动态规划的更多相关文章

  1. spfa+差分约束系统(C - House Man HDU - 3440 )+对差分约束系统的初步理解

    题目链接:https://cn.vjudge.net/contest/276233#problem/C 题目大意:有n层楼,给你每个楼的高度,和这个人单次的最大跳跃距离m,两个楼之间的距离最小是1,但 ...

  2. HDU 1074 Doing Homework (动态规划,位运算)

    HDU 1074 Doing Homework (动态规划,位运算) Description Ignatius has just come back school from the 30th ACM/ ...

  3. javascript 原型及原型链的初步理解

    最近折腾了好久,终于是把js里面的原型和原型链做了个初步的理解: 在这里,我打个比喻: 我(child),我妈constructor(构造函数)生了我:别人问我老妈跟谁生的我,于是此时我妈会指向我爸爸 ...

  4. Spring学习笔记--环境搭建和初步理解IOC

    Spring框架是一个轻量级的框架,不依赖容器就能够运行,像重量级的框架EJB框架就必须运行在JBoss等支持EJB的容器中,核心思想是IOC,AOP,Spring能够协同Struts,hiberna ...

  5. Graph Cuts初步理解

    一些知识点的初步理解_8(Graph Cuts,ing...) Graph cuts是一种十分有用和流行的能量优化算法,在计算机视觉领域普遍应用于前背景分割(Image segmentation).立 ...

  6. 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感

    关键字:名称,名称空间,引用,指针,指针类型的指针(即指向指针的指针) 我读完后的理解总结: 1. 我们知道,python中的变量的赋值操作,变量其实就是一个名称name,赋值就是将name引用到一个 ...

  7. springBoot(1)---springboot初步理解

    springboot初步理解 在没有用SpringBoot之前,我们用spring和springMVC框架,但是你要做很多比如: (1)配置web.xml,加载spring和spring mvc 2) ...

  8. Mysql加锁过程详解(7)-初步理解MySQL的gap锁

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

  9. HDU 1176 免费馅饼 (动态规划)

    HDU 1176 免费馅饼 (动态规划) Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼 ...

  10. 关于THINKPHP5模型关联的初步理解

    初步理解的意思是,使用最常用的关联模型,然后可以正常运行 还是打个比方 文章表  和文章分类表 一个文章分类可以有多个文章  所以  文章分类模型和文章建立 hasMany的关联 而文章和文章分类表则 ...

随机推荐

  1. 普冉PY32系列(四) PY32F002/003/030的时钟设置

    目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...

  2. JavaScript 函数所能传递的最大参数

    取决于实现,取决于浏览器和操作系统标准没有规定(65535一般是有的) 来源:https://stackoverflow.com/questions/22747068/is-there-a-max-n ...

  3. LeetCode_单周赛_327

    目录 6283. 正整数和负整数的最大计数 代码 6285. 执行 K 次操作后的最大分数 代码 6284. 使字符串总不同字符的数目相等 代码 6283. 正整数和负整数的最大计数 代码 直接遍历统 ...

  4. 【Oculus Interaction SDK】(七)使用射线进行交互(物体 & UI)

    前言 这篇文章是[Oculus Interaction SDK]系列的一部分,如果发现有对不上的对方,可以回去翻看我之前发布的文章,或在评论区留言.如果文章的内容已经不适用于新版本了,也可以直接联系我 ...

  5. C#中的Byte,String,Int,Hex之间的转换函数

    /// <summary> Convert a string of hex digits (ex: E4 CA B2) to a byte array. </summary> ...

  6. vue的异步组件

    异步组件 异步组件:可以在首页加载之前先加载的组件,主要是做性能优化,提高用户体验 一.基本用法 在大型项目中,我们可能需要拆分应用为更小的块,并仅在需要时再从服务器加载相关组件.Vue 提供了 de ...

  7. 【KAWAKO】将conda虚拟环境设置进jupyter-notebook

    目录 进入虚拟环境 安装ipykernel 将虚拟环境加入notebook的kernel 打开jupyter-notebook并使用 进入虚拟环境 conda activate audio 安装ipy ...

  8. JZOJ 5460. 士兵训练

    题目 \(1\le n,q \le 2\cdot {10}^5,0\le b_i,l_i \le {10}^9,b_i \ge 1,1 \le S_i \le n\) \(Solution\) 这题很 ...

  9. 关于php imagettftext 函数错误解决问题

    imagettftext 这个函数是给图片添加水印的,但是不知道为什么我用不起,直到在网上找到了答案: 是因为字体文件路径原因,相对路径可能我位置不对,该成绝对路径就没问题了! 把'Facon-2.t ...

  10. ACR2022的辩论:DMARDs在pre-RA中的作用

    ACR2022的辩论:DMARDs在pre-RA中的作用 2022年11月13日   亚临床RA在风湿病学实践中越来越常见:然而,目前尚不清楚如何管理这些患者,以及启动DMARD是否可以预防RA的发展 ...