动态规划(DP)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态规划(DP)相关的知识,希望对你有一定的参考价值。

 

在学习动态规划前 , 先补充些有关递归的知识 。

  

  所谓的递归函数 就是调用自身函数的过程 ,因此是用栈来存储的 。

  递归函数的最终返回值 就是第一次调用函数的返回值 。

  在写函数递归时 , 要特别注意的两点 :

       一是  递归 递归 , 一定有让它有能让他回归的条件 。

    二是  写递归时 , 要找到一个最简单的关系式 , 方便写递归函数 。

 

话不多说 , 进入正题 , 先看这道题 。( poj 1163 ) 

 

7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

(Figure 1)
Figure 1 shows a number triangle. Write a program that calculates the highest sum of numbers passed on a route that starts at the top and ends somewhere on the base. Each step can go either diagonally down to the left or diagonally down to the right.

Input

Your program is to read from standard input. The first line contains one integer N: the number of rows in the triangle. The following N lines describe the data of the triangle. The number of rows in the triangle is > 1 but <= 100. The numbers in the triangle, all integers, are between 0 and 99.

Output

Your program is to write to standard output. The highest sum is written as an integer.

Sample Input

5
7
3 8
8 1 0 
2 7 4 4
4 5 2 6 5

Sample Output

30


题目的意思是 : 从上到下 ,每次可以走左下角 或者右下角 , 问最大和是多少 。

  我们可以用一个二维数组去存放此三角形 。
   用 pre[i][j] 表示 第 i 行 第 j 个数 ,每次移动可以有两种选择 , 选择向左下走 , 即 pre[i+1][j] , 或者选择向 右下走 , 即 pre[i+1][j+1] , 若走到最后一行时 ,则返回 pre[i][j] , 不在调用 。



以上是关于动态规划(DP)的主要内容,如果未能解决你的问题,请参考以下文章

51nod 1021 石子归并 (动态规划 简单代码)

动态规划算法(Dynamic Programming,简称 DP)

动态规划_计数类dp_数位统计dp_状态压缩dp_树形dp_记忆化搜索

动态规划-数位dp

[程序员代码面试指南]递归和动态规划-最长公共子串问题(DP,LCST)

程序员算法基础——动态规划