418531 ภาคต้น 2552/โจทย์ปัญหาการโปรแกรมพลวัต I/เฉลยข้อ 2
ไปยังการนำทาง
ไปยังการค้นหา
ให้ เป็น penalty ที่น้อยที่สุดที่พิจารณาการเดินทางจากตำแหน่งที่ ถึงตำแหน่งที่
พิจารณากรณีที่ จะได้ว่า
กรณีที่ จะได้ว่า
คือถ้าพิจารณาการเดินทางที่มาหยุดที่ตำแหน่งที่ ใด ๆ ที่ไม่ใช่ตำแหน่งสุดท้ายแล้ว การตัดสินใจต่อไปคือจะไปหยุดที่ตำแหน่งไหนเป็นตำแหน่งต่อไป ซึ่งตำแหน่งที่เราสามารถหยุดได้คือ ตำแหน่งที่ โดยที่ นั่นเอง แล้วเราต้องเลือกหยุดตำแหน่งที่ทำให้ 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>