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

โปรแกรมนับจำนวนวิธีที่เราสามารถเติม 3 x n box ด้วย 2 x 1 dominos ใน Python


สมมติว่าเรามีตัวเลข n เราต้องหาจำนวนวิธีที่เราสามารถเติมบล็อก (3 x n) ที่มีโดมิโน 1 x 2 ได้ เราสามารถหมุนโดมิโนได้เมื่อจำเป็น หากคำตอบมีขนาดใหญ่มาก ให้ส่งคืน mod นี้ 10^9 + 7

ดังนั้น หากอินพุตเท่ากับ n =4 เอาต์พุตจะเป็น 11

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

  • ม =10^9 + 7
  • ถ้า n เป็นเลขคี่
    • คืน 0
  • cs :=1, os :=0
  • สำหรับฉันในช่วง 2 ถึง n เพิ่มขึ้น 2 ทำ
    • cs :=3 * cs + os
    • os :=2 * cs + os
  • คืนค่า cs mod m

ตัวอย่าง (Python)

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

class Solution:
   def solve(self, n):
      m = (10 ** 9 + 7)
      if n % 2 == 1:
         return 0
      cs = 1
      os = 0
      for i in range(2, n + 1, 2):
         cs, os = (3 * cs + os, 2 * cs + os,)
      return cs % m
ob = Solution()
n = 4
print(ob.solve(n))

อินพุต

4

ผลลัพธ์

11