欧拉计划18

本文通过一个具体的三角形数组实例,介绍了如何使用动态规划算法找到从顶点到底部的最大路径和。通过逆向思维,从底部向上更新每个节点的值,最终得到顶部节点的最大路径和。

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

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int a[15][15]=
    {
        {75},
        {95,64},
        {17 ,47 ,82},
        {18 ,35 ,87, 10},
        {20 ,4 ,82, 47, 65},
        {19, 1 ,23 ,75 ,03 ,34},
        {88, 2 ,77, 73, 7 ,63, 67},
        {99 ,65 ,4 ,28 ,6 ,16, 70, 92},
        {41, 41 ,26 ,56, 83 ,40, 80 ,70, 33},
        {41 ,48 ,72 ,33, 47 ,32 ,37, 16, 94 ,29},
        {53, 71 ,44 ,65 ,25 ,43 ,91 ,52 ,97, 51 ,14},
        {70 ,11 ,33, 28, 77 ,73, 17 ,78, 39, 68 ,17 ,57},
        {91 ,71, 52, 38 ,17 ,14 ,91 ,43 ,58 ,50, 27 ,29, 48},
        {63, 66 ,4 ,68, 89, 53 ,67, 30 ,73 ,16 ,69 ,87 ,40 ,31},
        {04, 62 ,98, 27 ,23 ,9 ,70, 98, 73 ,93 ,38 ,53 ,60 ,4 ,23}
    };
    for (int i = 13; i >= 0; --i)//从下往上
        for (int j = 0; j < i + 1; ++j)
        {
            a[i][j] = max(a[i + 1][j] + a[i][j], a[i][j] + a[i + 1][j + 1]);
        }
    cout << a[0][0] << endl;
    system("pause");
}

转载于:https://my.oschina.net/u/3772904/blog/1803314

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值