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

โปรแกรมหาค่าสูงสุดที่เราเจอในปัญหาเป้โดยการทำสำเนาหลายชุดในPython


สมมติว่าเรามีรายการความยาวเท่ากันสองรายการซึ่งเรียกว่าน้ำหนักและค่า และเรายังมีความจุอีกค่าหนึ่ง โดยที่ weights[i] และ values[i] แสดงถึงน้ำหนักและมูลค่าของไอเท็ม ith หากเรารับน้ำหนักได้สูงสุด และเราสามารถถ่ายสำเนาได้กี่ชุดสำหรับแต่ละรายการ เราต้องหามูลค่าสูงสุดที่เราจะได้รับ

ดังนั้น หากอินพุตเป็นเหมือนน้ำหนัก =[1, 2, 3] ค่า =[1, 5, 3] ความจุ =5 ผลลัพธ์จะเป็น 11

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

  • กำหนดฟังก์ชัน dp() นี่จะใช้เวลา i, k
  • ถ้าฉันเท่ากับขนาดของน้ำหนัก แล้ว
    • คืน 0
  • ตอบ :=dp(i + 1, k)
  • ถ้า k>=weights[i] แล้ว
    • ans :=สูงสุดของ ans และ dp(i, k - weights[i]) + ค่า[i]
  • คืนสินค้า
  • จากวิธีหลัก ให้ทำดังนี้ -
  • ผลตอบแทน dp(0, ความจุ)

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

ตัวอย่าง

class Solution:
   def solve(self, weights, values, capacity):
      def dp(i, k):
         if i == len(weights):
            return 0
         ans = dp(i + 1, k)
         if k >= weights[i]:
            ans = max(ans, dp(i, k - weights[i]) + values[i])
         return ans
      return dp(0, capacity)
ob = Solution()
weights = [1, 2, 3]
values = [1, 5, 3]
capacity = 5
print(ob.solve(weights, values, capacity))

อินพุต

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

ผลลัพธ์

11