首页 > 其他 > 详细

动态规划(DP)

时间:2017-08-09 19:45:57      阅读:234      评论:0      收藏:0      [点我收藏+]

 

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

  

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

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

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

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

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

 

话不多说 , 进入正题 , 先看这道题 。( 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)

原文:http://www.cnblogs.com/ccut-ry/p/7327226.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!