白駿-架橋(1010)



Dynamic Programming


質問する


元で都市の市長になった.この町には町を東と西に分ける大きな直線形の川が流れている.しかし元知では橋がないため、市民たちが川を渡るのに大きな不便があったため、橋を建てることにした.川沿いに橋を建てるのに適した場所をウェブサイトと言います.元で江辺をよく調べたところ、江西にはNのサイトがあり、東にはMのサイトがあることが分かった.(N ≤ M)
元は西のサイトと東のサイトを橋につなぎたいと思っています.(1つのサイトには最大1つのブリッジしか接続できません.)元ではできるだけ多くの橋を建てたいので、西のサイト数に応じて(N個)橋を建てたいです.足が重ならないと言ったら、橋を建てることができれば、足の数を計算することができます.

入力


入力された第1行は、試験例の個数Tを与える.次の行から、各テストケースについて、川の西と東に位置するサイトの個数整数N,M(0

しゅつりょく


各試験例について、所与の条件下でブリッジを構築できる数を出力する.
import math

def combi(n, r):
    f = math.factorial
    return f(n) / (f(r) * f(n-r))

T = int(input())
results = []

for i in range(T):
    N, M = map(int, input().split())
    results.append(int(combi(M, N)))

for result in results:
    print(result)
重ねられないという意味は交差できないという意味です
意味さえ理解すれば、難易度は高くない.
参照)
https://coding-factory.tistory.com/606
https://nerogarret.tistory.com/24