Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมนับจำนวนวิธีที่จะชนะมากที่สุด k เกมติดต่อกันใน Python


สมมติว่าเรามีตัวเลขสองตัว n และ k ในที่นี้ n หมายถึงจำนวนเกมที่เราจะเล่น เราต้องค้นหาว่าเราจะชนะ k หรือน้อยกว่านั้นได้กี่เกมติดต่อกัน หากคำตอบมีขนาดใหญ่เกินไป ให้แก้ไขผลลัพธ์ด้วย 10^9 + 7

ดังนั้น หากอินพุตเป็น n =3 k =2 เอาต์พุตจะเป็น 7 เนื่องจากวิธีที่เป็นไปได้ที่เราสามารถชนะ 2 ครั้งหรือน้อยกว่าติดต่อกันคือ ["LLL", "WLL", "LWL", "LLW", "WWL", "LWW", "WLW"]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ม :=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