zoukankan      html  css  js  c++  java
  • 数字三角形问题 动态规划

    数字三角形问题 动态规划

    OJ 问题:Triangle(参见 http://poj.org/problem?id=1163)
    题意:在数字三角形上寻找一条沿相邻顶点从顶到底走的路径,使路径上的数字和最大。
    输入:三角形高度 n,数字三角形数值。
    输出:最大数字和。

    在这里插入图片描述

    解决思路:

    由下而上逐个计算个点到最低端的最大路径,因为最大路径的子路径也一定是最大路径,而且右下而上只有两个方向,一个是正上方一个是右上方
    比如4到达最顶端的最大路径的子路径一定包含2和7,而2到顶端的最大路径一定包含8或者1,以此类推
    我们用一个数组表示范围一个数组表示距离
    在这里插入图片描述

    解题代码

    #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开发,操作系统,计算机网络,觉得我的文章有帮助的小伙伴可以关注我,有疑问可评论私信,相逢即是缘,大家高处见

    在这里插入图片描述

  • 相关阅读:
    分布式发布订阅消息系统 Kafka 架构设计[转]
    KAFKA分布式消息系统[转]
    文本协议与二进制协议的选择
    实现程序的热升级
    实现程序的热升级
    一个Socket数据处理模型
    关于GC进行垃圾回收的时机
    多线程
    线程同步(AutoResetEvent与ManualResetEvent)
    异步
  • 原文地址:https://www.cnblogs.com/pjhaymy/p/13907460.html
Copyright © 2011-2022 走看看