递归

package test;

import java.util.Scanner;

/*
 * 数字三角形(POJ1163)
    
    在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或 右下走。只需要求出这个最大和即可,不必给出具体路径。 三角形的行数大于1小于等于100,数字为 0 - 99
    输入格式:
    5      //表示三角形的行数    接下来输入三角形
    7
    3   8
    8   1   0
    2   7   4   4
    4   5   2   6   5
    要求输出最大和

 */
public class 递归 {  
    public static int dpSolution(int[][] a,int i,int j){  
        if(i>=a.length)  
            return 0;  
        int left=dpSolution(a,i+1,j);  
        int right=dpSolution(a,i+1,j+1);  
        return Math.max(right,left)+a[i][j];
    }  
    public static void main(String[] args){  
        Scanner scanner = new Scanner(System.in);  
        while(scanner.hasNext())  
        {  
            int n=scanner.nextInt();  
            int[][] a=new int[n][n];  
            for(int i=0;i<n;i++){  
                for(int j=0;j<=i;j++)  
                    a[i][j]=scanner.nextInt();  
            }  
            System.out.println(dpSolution(a,0,0) );  
        }  
        
    }  
}

 

posted on 2017-11-26 15:35  我吃你大西瓜  阅读(139)  评论(0编辑  收藏  举报

导航