ピラミッドパス

7725 ワード


以下のピラミッドがある場合,Aから最下位のK,L,M,N,Oへの経路を求める問題がある.
各場所で左下または右下から可能です.
この問題はdpで解決できる.例えば、A〜Lの経路は、A〜Gの経路と、A〜Hの経路とが加算された値である.
さらに、AからHへの経路は、AからD、Eへの経路に加算された値に等しい.
これらのオーバーラップ部分を有する問題は,dpを用いて容易に解決できる.
ピラミッドを行と列がそれぞれ5の2次元配列に入れ、以下のようにします.
public class Main
{
    public static void solution(int m, int n)
    {
        int[][] street = new int[n][m];

        street[0][0] = 1;
        
        for (int i=1; i<n; i++)
        {
            for (int j=0; j<=i; j++)
            { // 첫 열이거나 (ABDGK)
             // ACFJO 처럼 끝 대각선인 경우
                if (j == 0 || i == j)
                    street[i][j] = 1; // 경로가 1개 밖에 없다
                else // 그렇지 않은 경우
                    street[i][j] = street[i-1][j] + street[i-1][j-1];
            }
        }
        
        for (int i=0; i<n; i++)
        {
            for (int j=0; j<m; j++)
            {
                System.out.print(street[i][j] + " ");       
            }
            System.out.println();
        }
    }
    public static void main(String[] args) 
	{
	    int m = 5;
	    int n = 5;
	    solution(m, n);
	}
}