动态规划算法思想例子

本文介绍了动态规划在解决数塔问题和寻找最大字段和问题中的应用。对于数塔问题,通过三个二维数组实现动态规划策略,找到路径最大值。而对于最大字段和问题,利用递推算法找到两个序列的最大长度公共子序列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数塔问题:

问题描述:

给定一个数塔,其存储形式为如下所示的下三角矩阵。在此数塔中,从顶部出发,在每一节点可以选择向下走还是向右走,一直走到底层。请找出一条路径,使路径上的数值和最大。
输入样例(数塔):
9
12 15
10 6 8
2 18 9 5
19 7 10 4 16
输出样例(最大路径和):

算法思想:
用三个二维数组分别存储原始的数据,动态规划运算过程中的数据,和筛选的路径。
具体的思想为,第二个数组首先复制第一个数组,然后,从数塔的底部开始,每每比较n-1层的相邻两个值,取较大的一个加入n-2层,并存储下路径,具体理解看代码。最后将路径和最大值输出
代码如下

#include<iostream>
using namespace std;
int main()
{
   
   
	int a[50][50][3],i,j,n;
	cout << "请输入你要输入的列数:";
	cin >> n;
	for (i = 1; i <= n; i = i + 1)
	{
   
   
		for (j = 1; j <= i; j = j + 1)
		{
   
   
			cin >> a[i][j][1];
			a[i][j][2] = a[i][j][1];
			a[i][j][3] = 0;
		}
	}
		for (i = n - 1; i >= 1; i = i - 1)
		{
   
   
			for (j = 1; j <= i; j = j + 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值