藍橋杯 奪寶奇兵
阿新 • • 發佈:2018-12-31
題目
題目描述:
在一座山上,有很多很多珠寶,它們散落在山底通往山頂的每條道路上,不同道路上的珠寶的數目也各不相同.下圖為一張藏寶地圖:
73 88 1 02 7 4 44 5 2 6 5從山下出發,到達山頂,如何選路才能得到最多的珠寶呢?在上圖所示例子中,按照5->7->8->3->7的順序,將得到最大值30
輸入:
第一行正整數N(100>=N>1),表示山的高度。接下來有N行非負整數,第i行有i個整數(1<=i<=N),表示山的第i層上從左到右每條路上的珠寶數目
輸出:
一個整數,表示從山底到山頂的所能得到的珠寶的最大數目.
樣例輸入5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
30
思路
這題應該是一個簡單的dp了
有遞推關係式f[i][j]=Max(f[i+1][j],f[i+1][j+1])+f[i][j],從下往上遞推。
最後f[0][0]就是所求解。
程式碼
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan=new Scanner(System.in); int a[][] = new int[110][110]; for(int i=0;i<110;i++) { for(int j=0;j<110;j++) { a[i][j] = 0; } } int out[][] = new int [110][110]; int n=scan.nextInt(); for(int i=0;i<n;i++) { for(int j=0;j<=i;j++) { a[i][j] = scan.nextInt(); } } for(int i=n-1;i>=0;i--) { for(int j=0;j<=i;j++) { out[i][j]=(a[i+1][j]>a[i+1][j+1]?a[i+1][j]:a[i+1][j+1])+a[i][j]; a[i][j]=out[i][j]; } } System.out.println(out[0][0]); } }