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

โปรแกรมค้นหาวิธีเรียนภาษา Python อย่างมีประสิทธิภาพ


สมมติว่า เรามีสามรายการที่มีความยาวเท่ากัน สิ่งเหล่านี้คือกำหนดเวลา เครดิต และระยะเวลา พวกเขาเป็นตัวแทนของการมอบหมายหลักสูตร สำหรับกำหนดเวลาการมอบหมายครั้งที่ i[i] แสดงกำหนดเวลา หน่วยกิต[i] แสดงเครดิต และระยะเวลา[i] แสดงจำนวนวันที่ต้องใช้ในการมอบหมายงานให้เสร็จสิ้น งานหนึ่งต้องเสร็จสิ้นก่อนที่จะเริ่มงานอื่น เราต้องจำไว้ว่าเราสามารถทำงานให้เสร็จในวันที่ครบกำหนดและขณะนี้เรากำลังเริ่มต้นวันที่ 0

ดังนั้น หากข้อมูลป้อนเข้า เช่น กำหนดเวลา =[7, 5, 10], หน่วยกิต =[8, 7, 10], ระยะเวลา =[5, 4, 10] ผลลัพธ์จะเป็น 10

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

  • งาน :=เรียงลำดับรายการ zip(กำหนดเวลา, ระยะเวลา, เครดิต)

  • กำหนดฟังก์ชัน dp()

    • ถ้าฉัน>=ขนาดของงาน แล้ว

    • คืนค่า 0

  • ตอบ :=dp(i + 1 วัน)

  • เส้นตาย ระยะเวลา เครดิต :=งาน[i]

  • ถ้าวัน + ระยะเวลา − 1 <=เส้นตายแล้ว

    • ans :=สูงสุดของ ans, dp(i + 1, วัน + ระยะเวลา) + เครดิต

  • กลับมาอีกครั้ง

  • จากวิธีหลักส่งคืน dp(0, 0)

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

ตัวอย่าง

class Solution:
   def solve(self, deadlines, credits, durations):
      jobs = sorted(zip(deadlines, durations, credits))
      def dp(i=0, day=0):
         if i >= len(jobs):
            return 0
         ans = dp(i + 1, day)
         deadline, duration, credit = jobs[i]
         if day + duration − 1 <= deadline:
            ans = max(ans, dp(i + 1, day + duration) + credit)
      return ans
return dp()
ob = Solution()
deadlines = [7, 5, 10]
credits = [8, 7, 10]
durations = [5, 4, 10]
print(ob.solve(deadlines, credits, durations))

อินพุต

[7, 5, 10], [8, 7, 10], [5, 4, 10]

ผลลัพธ์

10