android 动态规划,6. 动态规划(一)Android移动应用开发.pdf

程序设计与算法(二)

算法基础

1

2

动态规划(一)

例题

数字三角形

加拿大班芙国家公园

例题一、数字三角形(POJ1163)

7

3 8

8 1 0

2 7 4 4

4 5 2 6 5

在上面的数字三角形中寻找一条从顶部到底边的路径,使得

路径上所经过的数字之和最大。路径上的每一步都只能往左下或

右下走。只需要求出这个最大和即可,不必给出具体路径。

三角形的行数大于1小于等于100,数字为 0 - 99

5

输入格式:

5 //三角形行数。下面是三角形

7

3 8

8 1 0

2 7 4 4

4 5 2 6 5

要求输出最大和

6

解题思路:

用二维数组存放数字三角形。

D( r, j) : 第r行第 j 个数字(r,j从 1开始算)

MaxSum(r, j) : 从D(r,j)到底边的各条路径中,

最佳路径的数字之和。

问题:求 MaxSum(1,1)

典型的递归问题。

D(r, j)出发,下一步只能走D(r+1,j)或者D(r+1, j+1)。故对于N行的三角形:

if ( r == N)

MaxSum (r,j) = D(r,j)

else

MaxSum ( r, j) = Max{ MaxSum (r+1,j), MaxSum (r+1,j+1) }

+ D(r,j) 7

数字三角形的递归程序:

#include

#include

#define MAX 101

using namespace std;

int D[MAX][MAX];

int main(){

int n;

int i,j;

int MaxSum(int i, int j){ cin >> n;

if(i==n) for(i=1;i<=n;i++)

return D[i][j]; for(j=1;j<=i;j++)

int x = MaxSum(i+1,j); cin >> D[i][j];

cout << MaxSum(1,1) << endl;

int y = MaxSum(i+1,j+1);

}

return max(x,y)+D[i][j];

}

8

为什么超时?

7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值