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

โปรแกรมนับจำนวนวิธีที่เราสามารถโยน n dices ใน Python


สมมุติว่าเรามีตัวเลข n จำนวนหน้า และมูลค่ารวม เราต้องหาจำนวนวิธีที่จะโยนลูกเต๋า n หน้าให้ได้ทั้งหมด หากคำตอบคือ mod ที่ใหญ่มาก ผลลัพธ์จะเป็น 10**9 + 7.

ดังนั้น หากอินพุตเป็น n =2 หน้า =6 ทั้งหมด =8 ผลลัพธ์จะเป็น 5 เนื่องจากมี 5 วิธีในการสร้าง 8 กับ 2 ลูกเต๋า 6 หน้า (2 และ 6) (6 และ 2) , (3 และ 5), (5 และ 3), (4 และ 4).

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

  • ม :=10^9 + 7

  • dp :=รายการขนาด (รวม + 1) จากนั้นเติม 0

  • สำหรับใบหน้าในระยะ 1 ถึงใบหน้าขั้นต่ำ ให้อัปเดตในแต่ละขั้นรวม +1 ทำ

    • dp[ใบหน้า] :=1

  • สำหรับฉันอยู่ในช่วง 0 ถึง n - 2 ทำ

    • สำหรับ j ในช่วงทั้งหมดเป็น 0, ลดลง 1 ทำ

    • dp[j] :=ผลรวมของ dp[j - f] ทั้งหมดสำหรับ f ในช่วง 1 ถึงใบหน้า + 1 เมื่อ j - f>=1

  • ส่งคืนองค์ประกอบสุดท้ายของ dp mod m

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

ตัวอย่าง

class Solution:
   def solve(self, n, faces, total):
      m = 10 ** 9 + 7
      dp = [0] * (total + 1)

      for face in range(1, min(faces, total) + 1):
         dp[face] = 1
      for i in range(n - 1):
         for j in range(total, 0, -1):
            dp[j] = sum(dp[j - f] for f in range(1, faces + 1) if j - f >= 1)
      return dp[-1] % m
ob = Solution()
n = 2
faces = 6
total = 8
print(ob.solve(n, faces, total))

อินพุต

2,6,8

ผลลัพธ์

5