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

โปรแกรมหาจำนวนของผลรวมเหรียญที่แตกต่างกันที่เราสามารถสร้างด้วยเหรียญและปริมาณใน Python ได้หรือไม่


สมมติว่าเรามีรายการค่าที่เรียกว่า coins และอีกรายการหนึ่งเรียกว่าปริมาณที่เท่ากัน มูลค่าของเหรียญ ith คือ coins[i] และขณะนี้เรามีจำนวนเหรียญ ith ในปริมาณ[i] เราต้องหาจำนวนค่ารวมของเหรียญที่แตกต่างกันที่เราหาได้โดยใช้กลุ่มที่ไม่ว่างเปล่าของเหรียญเหล่านี้

ดังนั้น หากการป้อนเป็นเหมือนเหรียญ =[1, 2, 5] ปริมาณ =[1, 2, 1] ผลลัพธ์จะเป็น 10 เนื่องจากเราสามารถมีผลรวมเหรียญที่แตกต่างกันดังต่อไปนี้ [1] =1, [2] =2, [1,2] =3, [2,2] =4, [5] =5, [1,5] =6, [2,5] =7, [1,2,5] =8 , [2,2,5] =9, [1,2,2,5] =10.

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

กำหนดฟังก์ชัน rec() นี่จะใช้เวลา i, res

if i is same as size of coins , then
   return
for k in range 0 to quantities[i] + 1, do
   cur := res + k * coins[i]
   insert cur into fres
   rec(i + 1, cur)
From the main method, do the following:
fres := a new set
rec(0, 0)
return size of fres - 1

ตัวอย่าง

class Solution:
   def solve(self, coins, quantities):
      def rec(i, res):
         if i == len(coins):
            return
         for k in range(0, quantities[i] + 1):
            cur = res + k * coins[i]
            fres.add(cur)
            rec(i + 1, cur)

      fres = set()
      rec(0, 0)
      return len(fres) - 1

ob = Solution()
coins = [1, 2, 5]
quantities = [1, 2, 1]
print(ob.solve(coins, quantities))

อินพุต

[1, 2, 5], [1, 2, 1]

ผลลัพธ์

10