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

จาก Theory Wiki
รุ่นแก้ไขเมื่อ 09:43, 3 ตุลาคม 2552 โดย Aoy (คุย | มีส่วนร่วม) (หน้าที่ถูกสร้างด้วย 'ให้ <math> OPT(i) \,</math> เป็น penalty ที่น้อยที่สุดที่พิจารณาการเ…')
(ต่าง) ←รุ่นแก้ไขก่อนหน้า | รุ่นแก้ไขล่าสุด (ต่าง) | รุ่นแก้ไขถัดไป→ (ต่าง)
ไปยังการนำทาง ไปยังการค้นหา

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