สมมติว่าเรามีรายการตัวเลขที่เรียกว่าความสูงซึ่งแสดงถึงความสูงของต้นไม้ และเรามีรายการค่าอื่นที่เรียกว่าต้นทุนซึ่งแสดงถึงราคาที่จำเป็นในการเพิ่มความสูงของต้นไม้ทีละรายการ เราต้องหาต้นทุนที่น้อยที่สุดเพื่อทำให้แต่ละส่วนสูงในรายการความสูงแตกต่างจากความสูงที่อยู่ติดกัน
ดังนั้น หากอินพุตเท่ากับความสูง =[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