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

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
แถว 18: แถว 18:
 
     j = n
 
     j = n
 
     if i < j then
 
     if i < j then
         return 0
+
         M[i,j] = 0
 
     else if i = j then
 
     else if i = j then
         return 1
+
         M[i,j] = 1
 
     else
 
     else
 
         if s[i] != s[j] then
 
         if s[i] != s[j] then

รุ่นแก้ไขเมื่อ 08:31, 3 ตุลาคม 2552

เนื่องจากพาลินโดรมคือสตริงที่อ่านจากซ้ายไปขวาหรือจากขวาไปซ้ายแล้วจะเหมือนกัน ดังนั้นการตรวจสอบว่าสตริงเป็นพาลินโดรมหรือไม่ เราก็ควรตรวจสอบว่าตัวอักษรตัวแรกของทางซ้ายกับตัวอักษรตัวสุดท้ายของทางขวาเหมือนกันหรือไม่ ถ้าเหมือนแล้วจะทำอะไร และถ้าไม่เหมือนจะทำอะไร

ให้ คือความยาวของลำดับย่อยที่เป็นพาลินโดรมที่ยาวที่สุดของสตริง

พิจารณากรณีที่ จะได้ว่า

Error

Too many requests (f061ab2)

กรณีที่

Error

Too many requests (f061ab2)

จะได้ว่า

ส่วนกรณีที่เหลือจะได้ว่า

Error

Too many requests (f061ab2)

ถ้า

หรือ

Error

Too many requests (f061ab2)

ถ้า

เขียนเป็น pseudocode ได้ดังนี้

<geshi lang="c"> PALINDROMIC(s,n)

   i =1
   j = n
   if i < j then
       M[i,j] = 0
   else if i = j then
       M[i,j] = 1
   else
       if s[i] != s[j] then
           M[i,j] = max(M[i+1,j],M[i,j-1])
       else
           M[i,j] = max(M[i+1,j],M[i,j-1],M[i+1,j-1])
   return M[1,n]

</geshi>

รายการเลือกการนำทาง