Python程式:計算最多連勝k場的獲勝方式數量


假設我們有兩個數字n和k。其中n表示我們將要玩的遊戲數量。我們必須找出以多少種方式我們可以連續贏得k場或更少場遊戲。如果答案過大,則將結果模 10^9 + 7。

因此,如果輸入類似於n = 3 k = 2,則輸出將為7,因為我們可以連續贏得2場或更少場遊戲的可能方式是["LLL", "WLL", "LWL", "LLW", "WWL", "LWW", "WLW"]

為了解決這個問題,我們將遵循以下步驟:

  • m := 1^9 + 7
  • 定義一個函式dp()。它將接收i和K作為引數
  • 如果i >= n 或 K > k,則
    • 返回K <= k時為真,否則為假
  • 返回dp(i + 1, 0) mod m + dp(i + 1, K + 1) mod m
  • 從主方法中執行以下操作:
  • 返回dp(0, 0) mod m

示例

讓我們看看以下實現以獲得更好的理解:

def solve(n, k):
   m = 1**9 + 7

   def dp(i, K):
      if i >= n or K > k:
         return K <= k
      return dp(i + 1, 0) % m + dp(i + 1, K + 1) % m

   return dp(0, 0) % m

n = 4
k = 2
print(solve(n, k))

輸入

4, 2

輸出

5

更新於: 2021年10月18日

260 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.