ผลต่างระหว่างรุ่นของ "418531 ภาคต้น 2552/โจทย์ปัญหาการโปรแกรมพลวัต I/เฉลยข้อ 8"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
 
(ไม่แสดง 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> OR <math> OPT(i,v-x_i) \,</math> ถ้า <math> v \geq x_i \,</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>