簡單DP--數字三角形

算法訓練 數字三角形  
時間限制:1.0s   內存限制:256.0MB
   
問題描述
  (圖3.1-1)示出了一個數字三角形。 請編一個程序計算從頂至底的某處的一條路
  徑,使該路徑所經過的數字的總和最大。
  ●每一步可沿左斜線向下或右斜線向下走;
  ●1<三角形行數≤100;
  ●三角形中的數字爲整數0,1,…99;


  .
  (圖3.1-1)
輸入格式
  文件中首先讀到的是三角形的行數。

  接下來描述整個三角形
輸出格式
  最大總和(整數)
樣例輸入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
樣例輸出
30


代碼

import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner cin=new Scanner(System.in);
        int i,j,m,n;
        int[][] a=new int[100][100];
        while(cin.hasNext()){
            n=cin.nextInt();
            for(i=0;i<n;i++)
                for(j=0;j<=i;j++)
                    a[i][j]=cin.nextInt();
            if(n==1){
                System.out.println(a[0][0]);
                continue;
            }
            for(i=n-2;i>=0;i--)
                for(j=0;j<=i;j++)
                {
                    if(a[i+1][j]>a[i+1][j+1])
                        a[i][j]+=a[i+1][j];
                    else
                        a[i][j]+=a[i+1][j+1];
                }
            System.out.println(a[0][0]);
        }
        cin.close();
    }

}


錯誤原因:第一次代碼從最後一層推的,寫的條件i=n-1,忽略了數組從a[0][0]開始,太久沒敲代碼不會思考了。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章