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

โปรแกรมหาต้นทุนขั้นต่ำเพื่อเพิ่มความสูงของต้นไม้ที่ไม่มีต้นไม้ข้างเคียงมีความสูงเท่ากันใน Python


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

ดังนั้น หากอินพุตเท่ากับความสูง =[3, 2, 2] ต้นทุน =[2, 5, 3] ผลลัพธ์จะเป็น 3 เนื่องจากเราสามารถเพิ่มความสูงสุดท้ายได้ 1 ซึ่งเท่ากับ 3

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

  • กำหนดฟังก์ชัน dp() นี่จะใช้เวลา idx, l_height

  • ถ้า idx เท่ากับขนาดความสูง - 1 แล้ว

    • คืนค่า 0 หาก heights[idx] ไม่เหมือนกับ l_height มิฉะนั้นจะมีค่าใช้จ่าย[idx]

  • ret :=inf

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

    • ถ้า heights[idx] + i ไม่เหมือนกับ l_height แล้ว

      • ret :=ขั้นต่ำของ ret, dp(idx + 1, heights[idx] + i) + cost[idx] * i

  • รีเทิร์น

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

ตัวอย่าง

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

คลาสโซลูชัน:def แก้ปัญหา(ตัวเอง ความสูง ค่าใช้จ่าย):def dp(idx, l_height):if idx ==len(heights) - 1:return 0 if heights[idx] !=l_height else cost[idx] ret =float("inf") สำหรับฉันใน range(3):if heights[idx] + i !=l_height:ret =min(ret, dp(idx + 1, heights[idx] + i) + cost[idx ] * i) return ret return dp(0, none)ob =Solution()heights =[3, 2, 2] cost =[2, 5, 3]print(ob.solve(heights, cost))

อินพุต

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

ผลลัพธ์

3