ผลต่างระหว่างรุ่นของ "418531 ภาคต้น 2552/โจทย์ปัญหาการโปรแกรมพลวัต I/เฉลยข้อ 8"
ไปยังการนำทาง
ไปยังการค้นหา
Aoy (คุย | มีส่วนร่วม) |
|||
(ไม่แสดง 3 รุ่นระหว่างกลางโดยผู้ใช้ 1 คน) | |||
แถว 7: | แถว 7: | ||
กรณีที่มีเหรียญ<math> x_1,x_2,...,x_i \,</math> เหรียญแต่ไม่มีเงินให้ทอน จะได้ว่า <math> OPT(i,0) = yes \,</math> | กรณีที่มีเหรียญ<math> x_1,x_2,...,x_i \,</math> เหรียญแต่ไม่มีเงินให้ทอน จะได้ว่า <math> OPT(i,0) = yes \,</math> | ||
− | ส่วนกรณีที่มีเหรียญ <math> x_1,x_2,...,x_i \,</math> เหรียญและมีเงินให้ทอน <math> v \,</math> บาท จะได้ว่า <math> OPT(i,v)=OPT(i-1,v)\,</math> | + | ส่วนกรณีที่มีเหรียญ <math> x_1,x_2,...,x_i \,</math> เหรียญและมีเงินให้ทอน <math> v \,</math> บาท จะได้ว่า <math> OPT(i,v)=OPT(i-1,v) \vee OPT(i,v-x_i) \,</math> ถ้า <math> v \geq x_i \,</math> |
+ | |||
+ | อธิบายเพิ่ม <math> OPT(i-1,v)\,</math> คือการที่ไม่ใช้เหรียญ <math> i \,</math> ช่วยในการทอนเงิน <math> v \,</math> บาท ดังนั้นจึงใช้เหรียญที่เหลือคือ <math> 1,2,...,(i-1) \,</math> ในการทอนเงิน <math> v \,</math> บาทเท่าเดิมแทน | ||
+ | |||
+ | ส่วน <math> OPT(i,v-x_i) \,</math> คือการใช้เหรียญที่ <math> i \,</math> ช่วยในการทอนเงิน แต่สังเกตว่าเราสามารถใช้เหรียญที่ <math> i \,</math> นี้มากกว่าหนึ่งครั้งก็ได้ ดังนั้นจำนวนเหรียญที่จะใช้ทอนเงินจึงไม่ลดลง แต่จำนวนเงินที่เราต้องทอนจะลดลงไปเป็น <math> v-x_i \,</math> เมื่อ <math> x_i \,</math> เป็นมูลค่าของเหรียญที่ <math> i \,</math> | ||
+ | |||
+ | เขียนเป็น pseudocode ได้ดังนี้ | ||
+ | |||
+ | <geshi lang="c"> | ||
+ | FindSolution(i,v) | ||
+ | if i=0 and v=0 then | ||
+ | return 1 | ||
+ | else if i=0 and v > 0 then | ||
+ | return 0 | ||
+ | else if v=0 then | ||
+ | return 1 | ||
+ | else | ||
+ | if v >= x_i | ||
+ | M(i,v)= FindSolution(i-1,v) OR FindSolution(i,v-x_i) | ||
+ | return M(i,v) | ||
+ | </geshi> |
รุ่นแก้ไขปัจจุบันเมื่อ 07:45, 3 ตุลาคม 2552
ให้ มีค่าเป็น ถ้าสามารถใช้เหรียญ ทอนเงิน บาทได้ หรือมีค่าเป็น ถ้าไม่สามารถใช้เหรียญ ทอนเงิน บาทได้
พิจารณากรณีที่ไม่มีเหรียญและไม่มีเงินต้องทอน จะได้ว่า
กรณีที่ไม่มีเหรียญแต่มีเงินให้ทอน บาทจะได้ว่า ถ้า
กรณีที่มีเหรียญ เหรียญแต่ไม่มีเงินให้ทอน จะได้ว่า
ส่วนกรณีที่มีเหรียญ เหรียญและมีเงินให้ทอน บาท จะได้ว่า ถ้า
อธิบายเพิ่ม คือการที่ไม่ใช้เหรียญ ช่วยในการทอนเงิน บาท ดังนั้นจึงใช้เหรียญที่เหลือคือ ในการทอนเงิน บาทเท่าเดิมแทน
ส่วน คือการใช้เหรียญที่ ช่วยในการทอนเงิน แต่สังเกตว่าเราสามารถใช้เหรียญที่ นี้มากกว่าหนึ่งครั้งก็ได้ ดังนั้นจำนวนเหรียญที่จะใช้ทอนเงินจึงไม่ลดลง แต่จำนวนเงินที่เราต้องทอนจะลดลงไปเป็น เมื่อ เป็นมูลค่าของเหรียญที่
เขียนเป็น pseudocode ได้ดังนี้
<geshi lang="c"> FindSolution(i,v)
if i=0 and v=0 then return 1 else if i=0 and v > 0 then return 0 else if v=0 then return 1 else if v >= x_i M(i,v)= FindSolution(i-1,v) OR FindSolution(i,v-x_i) return M(i,v)
</geshi>