zoukankan      html  css  js  c++  java
  • HDU 2084 数塔

    Problem Description
    在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的:

    有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?

    已经告诉你了,这是个DP的题目,你能AC吗?
     
    Input
    输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间[0,99]内。
     
    Output
    对于每个测试实例,输出可能得到的最大和,每个实例的输出占一行。
     
    Sample Input
    1 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
     
    Sample Output
    30


    解法一    递归算法

    import java.io.BufferedInputStream;
    import java.util.*;
    public class Main {
    	public static void main(String[] args) {
    		Scanner sc=new Scanner(new BufferedInputStream(System.in));
    		int k=sc.nextInt();
    		for(int i=0;i<k;i++){
    			int m=sc.nextInt();
    			int a[][]=new int[m][m];
    			for(int j=0;j<m;j++){
    				for(int p=0;p<=j;p++){
    					a[j][p]=sc.nextInt();
    				}
    			}
    			System.out.println(fun(m-1,a));
    		}
    	}
    	public static int fun(int m,int a[][]){
    		if(m==0) return a[0][0];
    		for(int i=m;i>0;i--){
    			if((a[m][i]+a[m-1][i-1])>(a[m][i-1]+a[m-1][i-1]))
    				a[m-1][i-1]=a[m][i]+a[m-1][i-1];
    			else{
    				a[m-1][i-1]=a[m][i-1]+a[m-1][i-1];
    			}
    		}
    		return fun(m-1,a);
    	}
    }
    


    解法二 

    import java.io.BufferedInputStream;
    import java.util.*;
    public class Main {
    	public static void main(String[] args) {
    		Scanner sc=new Scanner(new BufferedInputStream(System.in));
    		int k=sc.nextInt();
    		for(int i=0;i<k;i++){
    			int m=sc.nextInt();
    			int a[][]=new int[m][m];
    			for(int j=0;j<m;j++){
    				for(int p=0;p<=j;p++){
    					a[j][p]=sc.nextInt();
    				}
    			}
    			System.out.println(fun(m,a));
    		}
    	}
    	public static int fun(int m,int a[][]){
    		 for(int i=m-1;i>=0;i--){
    			 for(int j=i;j>0;j--){
    				 if((a[i][j]+a[i-1][j-1])>(a[i][j-1]+a[i-1][j-1]))
    					 a[i-1][j-1]=a[i][j]+a[i-1][j-1];
    				 else
    					a[i-1][j-1]=a[i][j-1]+a[i-1][j-1];
    			 }
    		 }
    		 return a[0][0];
    	}
    }
    


     

  • 相关阅读:
    网页布局
    Block Formatting Context
    SEO初识
    新的一个月,就这么不知不觉的来临了
    Js结束,项目进行中
    JS学习中....
    ws快捷键
    Html的学习以及webstorm的使用
    从事前端开发应该了解的CSS原理
    jQuery动画
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3211989.html
Copyright © 2011-2022 走看看