418531 ภาคต้น 2552/โจทย์ปัญหาการโปรแกรมพลวัต I/เฉลยข้อ 2

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา

ให้ เป็น penalty ที่น้อยที่สุดที่พิจารณาการเดินทางจากตำแหน่งที่

Error

Too many requests (f061ab2)

ถึงตำแหน่งที่

พิจารณากรณีที่

Error

Too many requests (f061ab2)

จะได้ว่า

กรณีที่

Error

Too many requests (f061ab2)

จะได้ว่า

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

Error

Too many requests (f061ab2)

โดยที่ นั่นเอง แล้วเราต้องเลือกหยุดตำแหน่งที่ทำให้ penalty น้อยที่สุดด้วย

เขียนเป็น pseudocode ได้ดังนี้

<geshi lang="c"> TRAVEL(a,n)

   M[n] = 0
   for i = 1 to n do
       min = infinity
       for j = i+1 to n do
           if (200-(a[j]-a[i]))^2 + M[j] < min then
               min = (200-(a[j]-a[i]))^2 + M[j]
       M[i] = min
   return M[0] // ส่ง ค่า M[0] เป็นคำตอบที่เป็น penalty ที่น้อยที่สุดที่พิจารณาการเดินทางจากตำแหน่ง 0 ไป n เป็นคำตอบ   

</geshi>

รายการเลือกการนำทาง