前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数字三角形问题 动态规划

数字三角形问题 动态规划

原创
作者头像
一只胡说八道的猴子
修改2020-11-02 10:40:57
4130
修改2020-11-02 10:40:57
举报

数字三角形问题 动态规划

OJ 问题:Triangle(参见 http://poj.org/problem?id=1163

题意:在数字三角形上寻找一条沿相邻顶点从顶到底走的路径,使路径上的数字和最大。

输入:三角形高度 n,数字三角形数值。

输出:最大数字和。

在这里插入图片描述
在这里插入图片描述

解决思路:

由下而上逐个计算个点到最低端的最大路径,因为最大路径的子路径也一定是最大路径,而且右下而上只有两个方向,一个是正上方一个是右上方

比如4到达最顶端的最大路径的子路径一定包含2和7,而2到顶端的最大路径一定包含8或者1,以此类推

我们用一个数组表示范围一个数组表示距离

在这里插入图片描述
在这里插入图片描述

解题代码

代码语言:txt
复制
#include<iostream>

using namespace std;



int main(){

    //输入的数组

    int arr[100][100];

    //表示距离的数组

    int max[100][100]={0};

    //输入三角形的行数

    int length;

    cin>>length;

   //逐个输入元素

   for(int i=1;i<=length;i++){

       for(int j=1;j<=i;j++){

           cin>>arr[i][j];

           if(i==length){

               //最底层的最大路径是本身 

           max[i][j]=arr[i][j]; 

       }

   } 

   } 

   //从底层开始递推

  for(int j=length-1;j>=1;j--){

      for(int i=1;i<=length-1;i++){

          //正下方 

          int one=max[j+1][i];

          int two=max[j+1][i+1];

        if(one>=two){

            max[j][i]=one+arr[j][i]; 

         } else{

             max[j][i]=two+arr[j][i] ; 

          } 

      } 

  } 

  cout<<max[1][1]<<endl;

   

} 
在这里插入图片描述
在这里插入图片描述

以上就是数字三角形问题 动态规划的解决方案,如有帮助还请点赞关注支持,如有疑问评论私信都可,看到后可帮助解答本博客主要侧重于数据结构于算法和java开发,操作系统,计算机网络,觉得我的文章有帮助的小伙伴可以关注我,有疑问可评论私信,相逢即是缘,大家高处见

在这里插入图片描述
在这里插入图片描述

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数字三角形问题 动态规划
  • 解决思路:
  • 解题代码
  • 以上就是数字三角形问题 动态规划的解决方案,如有帮助还请点赞关注支持,如有疑问评论私信都可,看到后可帮助解答本博客主要侧重于数据结构于算法和java开发,操作系统,计算机网络,觉得我的文章有帮助的小伙伴可以关注我,有疑问可评论私信,相逢即是缘,大家高处见
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档