zoukankan      html  css  js  c++  java
  • 数字三角形

    题目描述

    观察下面的数字金字塔。

    写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。

             7 
          3   8 
        8   1   0 
      2   7   4   4 
    4   5   2   6   5 

    在上面的样例中,从7 到 3 到 8 到 7 到 5 的路径产生了最大

    输入输出格式

    输入格式:

    第一个行包含 R(1<= R<=1000) ,表示行的数目。

    后面每行为这个数字金字塔特定行包含的整数。

    所有的被供应的整数是非负的且不大于100。

    输出格式:

    单独的一行,包含那个可能得到的最大的和。

    输入输出样例

    输入样例#1: 
    5
    7
    3 8
    8 1 0
    2 7 4 4
    4 5 2 6 5 
    
    输出样例#1:
    30


    分析&算法思路:

      设 d( i , j )表示数字三角形中的第 i 行第 j 个点。

      max[i][j]表示 第 i 行 第 j 个数字到低端的最佳路径之和,则原问题的解就是 max[1][1] 的值了。

      从d( i , j )这个点向下走,显然只能走 d( i +1, j ) 和 d( i+1 , j+1 ) 这两个点了。

      而 max[i][j] 的最优值= d( i , j ) 的值 + max{ max[i+1][j] ,max[i+1][j+1] }。

      所以,我们可以至底向上来计算。先计算最后一层的点的,然后倒二层的,……,一直算到第一层。




    代码:
    java:
    import java.util.Scanner;
    
    public class Date {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		int n = sc.nextInt();
    		int a[][] = new int[n][];//存放数值
    		int b[][] = new int[n][];//存放路径
    		
    		for (int i = 0; i < a.length; i++) {
    			a[i] = new int[i+1];
    			b[i] = new int[i+1];
    			for (int j = 0; j < a[i].length; j++) {
    				a[i][j] = sc.nextInt();
    			}
    		}
    		
    		for (int i = a.length-2; i >=0; i--) {
    			for (int j = 0; j < a[i].length; j++) {
    				if(a[i+1][j]>a[i+1][j+1]) {
    					a[i][j] += a[i+1][j];
    					b[i][j] = 0;//如果为0代表往左走
    				}else {
    					a[i][j] += a[i+1][j+1];
    					b[i][j] = 1;//如果为1代表往右走
    				}
    			}
    		}
    		
    		for (int i = 0; i < b.length; i++) {
    			for (int j = 0; j < b[i].length; j++) {
    				System.out.print(b[i][j]+" ");
    			}
    			System.out.println();
    		}
    		
    		System.out.println("最大的数为:"+a[0][0]);
    	}
    }
    

      

  • 相关阅读:
    [Python Study Notes]进程信息(丁丁软件监控进程,http-post)
    [Python Study Notes]cpu信息
    [Python Study Notes]电池信息
    [Python Study Notes]内存信息
    [Python Study Notes]磁盘信息和IO性能
    [Python Study Notes]计算cpu使用率v0.1
    [Python Study Notes]计算cpu使用率
    [Python Study Notes]psutil模块
    [解决问题] E: 无法获得锁 /var/lib/dpkg/lock
    [Python Study Notes] python面试题总结
  • 原文地址:https://www.cnblogs.com/-rainbow-/p/8395143.html
Copyright © 2011-2022 走看看