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

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

ให้ เป็น 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>