[PS]伯俊#1010架橋/PISN

5258 ワード


アルゴリズムの問題を解く

  • 題:橋を架ける2
  • ソリューション:solved
  • 分類:組合せ,DP
  • 解法(1)-組合せ


    式を
  • で組み合わせる
  • n!ここからDPからnまでのnを使います!配列で各値を求める.
  • dpで作製した配列を用いて式で計算した.
  • 解法(2)-DP

  • nの配列に初期化され、各インデックスはx個の東局として定義される.
  • dp[i]i番目のサイトを含む数+含まない数
    f(n, k) = f(n-1, k) + f(n-1, k-1)
  • dpアレイの最後の要素を出力します.
  • ソースコード

    T = int(input())
    for _ in range(T):
        N, M = map(int, input().split())
        dp = [[1] * (M+1) for _ in range(N+1)]
    
        for i in range(1, N+1):
            for j in range(1, M+1):
                if i > j :
                    dp[i][j] = 0
                elif i == j :
                    dp[i][j] = 1
                else:
                    dp[i][j] = dp[i][j-1] + dp[i-1][j-1]
        print(dp[-1][-1])