hint

ÀÌ ¹®Á¦´Â °¢ Áö¹æ¿ª¿¡ »ó¼Ò¹®ÀÌ ÀÖ´ÂÁö ¿©ºÎ°¡ ÁÖ¾îÁú ¶§, ÆĹ߸¶¸¦ ÅëÇØ ÃÖ¼ÒÀÇ ºñ¿ëÀ¸·Î ¸ðµç »ó¼Ò¹®À» ÇѾ翪À¸·Î Àü´ÞÇÏ´Â ¹®Á¦ÀÌ´Ù. ÇѾ翪°ú °¢ Áö¹æ¿ªÀº ¿øÇüÀ¸·Î ¹è¿­µÇ¾î ÀÖ À¸¸ç, ÇѾ翪ºÎÅÍ 1¹ø Áö¹æ¿ªÀ» Áö³ª N ¹ø Áö¹æ¿ª±îÁö ½Ã°è ¹æÇâÀ¸·Î ³ª¿­µÈ´Ù.

ÀÌ ¹®Á¦´Â °¢ µµ·Î¸¦ ±âÁØÀ¸·Î 1¹ø Áö¹æ¿ª ¹æ¸éÀÇ Áö¹æ¿ªµéÀº »ó¼Ò¹®À» 1¹ø Áö¹æ¿ªÀ¸·Î º¸³»°í, N ¹ø Áö¹æ¿ª ¹æ¸éÀÇ Áö¹æ¿ªµéÀº »ó¼Ò¹®À» N¹ø Áö¹æ¿ªÀ¸·Î º¸³»µµ·Ï ÇÑ ÈÄ ÃÖ¼Ò ºñ¿ë À» ±¸ÇÏ¿© ÇØ°á ÇÒ ¼ö ÀÖ´Ù. Áï, ÇѾ翪°ú 1¹ø Áö¹æ¿ª »çÀÌÀÇ µµ·Î, 1¹ø Áö¹æ¿ª°ú 2¹ø Áö¹æ ¿ª »çÀÌÀÇ µµ·Î, ¡¦, N - 1¹ø Áö¹æ¿ª°ú N ¹ø Áö¹æ¿ª »çÀÌÀÇ µµ·Î, N¹ø Áö¹æ¿ª°ú ÇѾ翪 »çÀÌÀÇ µµ·Î, ÃÑ N + 1 °³ÀÇ µµ·Î¸¦ °¢°¢ ¾ø¾Öº¸¸é¼­ ÀÏ·Ä·Î ¸¸µç µÚ ±× Áß ÃÖ¼Ò ºñ¿ëÀ» ¼±Åà ÇÑ´Ù.

ÀÏ·Ä·Î °¡Á¤ÇÑ ¹®Á¦¸¦ Ǫ´Â ¹æ¹ý Áß °¡Àå ½¬¿î ¹æ¹ýÀº ¸ðµç °æ¿ì¸¦ °í·ÁÇÏ´Â °ÍÀÌ´Ù. »ó¼Ò¹®À» °¡Áö°í ÀÖ´Â Áö¹æ¿ª¿¡¼­ ÆĹ߸¶¸¦ ¹Ù·Î º¸³¾ °ÍÀÎÁö ȤÀº ´Ù¸¥ Áö¹æ¿ª¿¡¼­ ¿À´Â »ó¼Ò¹®À» ±â´Ù¸° ÈÄ ÇÔ²² º¸³¾Áö ¿©ºÎ¸¦ °áÁ¤ÇÏ´Â °æ¿ìÀÇ ¼ö´Â 2^N °¡Áö´Ù. °¢°¢ÀÇ °æ¿ì¿¡ ´ëÇØ ºñ¿ëÀ» °è»êÇÏ¿© ÃÖ¼Ò ºñ¿ëÀ» ¼±ÅÃÇϸé ÀÏ·ÄÀÎ »óÅ¿¡¼­ ÃÖ¼Ò ºñ¿ëÀ» ±¸ÇÒ ¼ö ÀÖÀ¸¸ç, À̸¦ N°³ÀÇ ÀÏ·Ä¿¡ ¸ðµÎ Àû¿ëÇØ ´äÀ» ±¸ÇÑ´Ù. ÀÌ ¹æ¹ýÀº O( 2^N * N)ÀÇ ½Ã°£ º¹Àâµµ¸¦ °¡Áö¸ç ºÎºÐ¹®Á¦ 1À» ÇØ°áÇÏ¿© 11Á¡À» ¹ÞÀ» ¼ö ÀÖ´Ù.

µ¿Àû°èȹ¹ý(Dynamic Programming)À» È°¿ëÇÏ¿© À§ÀÇ ¹æ¹ýÀ» °³¼±ÇÒ ¼ö ÀÖ´Ù. s¹ø Áö¹æ¿ª°ú s+1 ¹ø Áö¹æ¿ª »çÀÌÀÇ µµ·Î¸¦ ¾ø¾Ø ÀÏ·ÄÀÇ °æ¿ì¸¦ ó¸® ÁßÀ̶ó°í °¡Á¤ÇÑ´Ù. ¸¸¾à, s = N À̶ó¸é, N ¹ø Áö¹æ¿ª°ú ÇѾ翪 »çÀÌÀÇ µµ·Î¸¦ ¾ø¾Ø °æ¿ìÀÌ´Ù.

A[i] ¸¦ i¹ø Áö¹æ¿ªÀÌ °¡Áö°í ÀÖ´Â »ó¼Ò¹®ÀÇ °³¼ö(0 ȤÀº 1), S[i]¸¦ 1¹øºÎÅÍ i¹ø±îÁöÀÇ Áö¹æ ¿ªµéÀÌ °¡Áö°í ÀÖ´Â »ó¼Ò¹®ÀÇ °³¼ö¶ó°í ÇÏÀÚ. Áï, ÀÌ´Ù.

D[i] ¸¦ 1¹øºÎÅÍ i¹ø±îÁö Áö¹æ¿ªÀÌ ÇѾ翡 ¸ðµç »ó¼Ò¹®À» º¸³¾ ¶§ ÃÖ¼Ò ºñ¿ë (i <= s ) À¸·Î, E[i] ¸¦ i¹øºÎÅÍ N ¹ø±îÁö Áö¹æ¿ªÀÌ ÇѾ翡 ¸ðµç »ó¼Ò¹®À» º¸³¾ ¶§ ÃÖ¼Ò ºñ¿ë (i > s) À¸·Î Á¤ÀÇÇÏÀÚ. ±×·¯¸é s¹ø Áö¹æ¿ª°ú s+1 ¹ø Áö¹æ¿ª »çÀÌÀÇ µµ·Î¸¦ ¾ø¾Ø °æ¿ìÀÇ ÃÖ¼Ò ºñ¿ëÀº D[s] + E[s+1]ÀÌ µÈ´Ù. °¢°¢¿¡ ´ëÇÑ Á¡È­½ÄÀº ¾Æ·¡¿Í °°´Ù.

if A[i] = 1 , D[i] = min( D[j] + (S[i] - S[j] + 1) *  i ) for 0 <= j < i
else D[i] = D[i-1]
if A[i] = 1 , E[i] = min( E[j] + ( S[j-1] - S[i-1] + 1) * ( N - i + 1) for i < j <= N + 1
else E[i] = E[i+1]
Ãʱ⠰ªÀº  D[0]=0 , E[N+1] = 0 ÀÌ´Ù.
   

À§ÀÇ ¹æ¹ýÀ¸·Î D¿Í E¸¦ °è»êÇÏ´Â ½Ã°£º¹Àâµµ´Â O(N^2)ÀÌ´Ù. À̸¦ °¢ µµ·Î¸¦ ¾ø¾Ö´Â °æ¿ì¿¡ ´ëÇØ ¹Ýº¹ÇÏ¸é  O(N^3)ÀÌ ¼Ò¿äµÇ¸ç ºÎºÐ¹®Á¦ 2¸¦ ÇØ°áÇÏ¿© 37Á¡À» ¹ÞÀ» ¼ö ÀÖ´Ù.

À§ ¹æ¹ý¿¡¼­ D ,E ÀÇ °ªÀº ¾î¶² µµ·Î¸¦ ¾ø¾Ö´ÂÁö¿Í »ó°ü¾øÀÌ Ç×»ó °°Àº °ÍÀ» ÀÖ´Ù. µû¶ó¼­ °¢ µµ·Î¸¦ ¾ø¾Ù ¶§ ¸¶´Ù µ¿Àû°èȹ¹ýÀ» ÅëÇØ °è»êÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, óÀ½ ÇÑ ¹ø¸¸ °è»êÇÑ ÈÄ min( D[s] + E[s+1]) for 0 <= s <= N À» ±¸ÇÏ¿© ½Ã°£º¹Àâµµ O(N^2)¿¡ ÇØ°áÇÒ ¼ö ÀÖ´Ù. ÀÌ ¹æ¹ýÀ¸·Î´Â ºÎºÐ¹®Á¦ 3À» ÇØ°áÇÏ¿© 58Á¡À» ¹ÞÀ» ¼ö ÀÖ´Ù.

À§ÀÇ ¹æ¹ýÀ» ´õ °³¼±ÇÏ¸é µ¿Àû°èȹ¹ýÀ» O(N)¿¡ ÇØ°áÇÒ ¼ö ÀÖ´Ù. D ¿Í E´Â ¹æÇâÀÌ ¹Ý´ëÀÏ »Ó °°Àº ¹æ¹ýÀ¸·Î ±¸ÇÒ ¼ö Àֱ⠶§¹®¿¡ ¾Æ·¡¿¡¼­´Â D ÀÇ °ªÀ» O(N)¿¡ °è»êÇÏ´Â ¹æ¹ý¸¸À» ¼³¸íÇÑ´Ù.

À§ÀÇ Á¡È­½Ä¿¡¼­ min ÇÔ¼öÀÇ º¯¼öÀÎ j¿Í »ó°ü¾øÀÌ ÀÏÁ¤ÇÑ °ªÀÎ (S[i] +1) ¡¿ i Ç×À» min ¹ÛÀ¸·Î »« ÈÄ Á¤¸®ÇÏ¸é ¾Æ·¡¿Í °°´Ù.

if A[i] = 1 , D[i] = min( D[j] - S[j] * i) + (S[i] + 1) * i for 0 <= j < i
else D[i] = D[i-1]
   
D[i]¸¦ ±¸Çϱâ À§Çؼ­´Â D[j] - S[j] * i °ªÀÌ ÃÖ¼Ò°¡ µÇ´Â j¸¦ ã¾Æ¾ß ÇÑ´Ù. ÀÌ´Â y = D[j] - S[j] * x ÀÎ Á÷¼±À» ±×·¡ÇÁ·Î ±×¸° ÈÄ x=i ¿¡¼­ÀÇ Á÷¼±µé Áß ÃÖ¼Ú°ªÀ» ã´Â °úÁ¤À¸·Î »ý°¢ÇÒ ¼ö ÀÖ´Ù. ÀÌ ¹®Á¦¿¡¼­ y = D[j] = S[j] * x ÀÇ ±â¿ï±â -S[j]´Â j°¡ Áõ°¡ÇÔ¿¡ µû ¶ó Ç×»ó °¨¼ÒÇϱ⠶§¹®¿¡ ¾î¶² i¿¡¼­ j¸¦ ÃÖÀûÇØ·Î ÂüÁ¶ÇÏ¿´´Ù¸é ÀÌÈÄÀÇ iÀÇ ÃÖÀûÇØ´Â Àý´ë j ÀÌÀüÀÇ °ªÀ» ÂüÁ¶ÇÏÁö ¾Ê´Â´Ù. À̸¦ ÀÌ¿ëÇϸé D[i] ¸¦ ¼øÂ÷ÀûÀ¸·Î ±¸ÇÒ ¶§ ÂüÁ¶ÇÏ´Â x=i ¿¡¼­ ÃÖ¼Ú°ªÀ» °¡Áö´Â Á÷¼± jµµ ¼øÂ÷ÀûÀ¸·Î Áõ°¡ÇÔÀ» ¾Ë ¼ö ÀÖ´Ù.

°¢ i¿¡ ´ëÇØ D[i]°¡ °è»êµÈ ÈÄ Á÷¼± y = D[i] - S[i] ¡¿ x °¡ ±âÁ¸¿¡ Ãß°¡µÈ ¸ðµç Á÷¼±º¸´Ù ÀÛ¾ÆÁö´Â ÁöÁ¡ÀÌ ÀÖ´Ù¸é ÀÌÈÄ¿¡ D[i]¸¦ °è»êÇÒ ¶§ ÀÌ Á÷¼±ÀÌ ÂüÁ¶µÉ °¡´É¼ºÀÌ Àֱ⠶§¹®¿¡ À̸¦ Ãß°¡ÇÑ´Ù. ¸¸¾à ±×·¸Áö ¾Ê´Ù¸é D[i]´Â ÃßÈÄÀÇ ¸ðµç x¿¡ ´ëÇØ ´ä¿¡ °ü¿©ÇÏÁö ¸øÇϹǷΠÃß°¡ÇÏÁö ¾Ê´Â´Ù. Á÷¼± y = D[i] - S[i] * xÀ» Ãß°¡ÇÒ ¶§ ÀÌ Á÷¼±¿¡ ÀÇÇØ ÃßÈÄ¿¡ ´äÀ¸·Î ÂüÁ¶ µÉ ¼ö ¾ø´Â ±âÁ¸ÀÇ Á÷¼±µéÀ» ³ªÁß¿¡ Ãß°¡µÈ Á÷¼±ºÎÅÍ Â÷·Ê·Î Á¦°ÅÇÑ´Ù.

°á±¹ ±×·ÁÁö´Â Á÷¼±µéÀº j°¡ Ä¿Áú¼ö·Ï D[j]´Â Áõ°¡ÇÏ°í -S[j]´Â °¨¼ÒÇÏ¸ç °¡Àå ÀÛÀº j°ªÀÌ x=i ¿¡¼­ ÃÖ¼Ú°ªÀ» °¡Áö°Ô µÈ´Ù. ¸¸¾à °¡Àå ÀÛÀº j°ªÀÌ x=i¿¡¼­ ´õ ÀÌ»ó ÃÖ¼Ú°ªÀÌ ¾Æ´Ï¶ó¸é Á÷¼± y = D[j] - S[j] * x¸¦ ±×·¡ÇÁ¿¡¼­ Á¦°ÅÇÑ´Ù.

Ãß°¡µÈ Á÷¼±µéÀ» Á¦°ÅÇÏ´Â °úÁ¤°ú »õ·Î¿î Á÷¼±À» Ãß°¡ÇÏ´Â °úÁ¤Àº ÃÑ O(N)¿¡ ÀÌ·ç¾îÁö¸ç, D[i]´Â ÀÌ Á÷¼±µéÀ» ÀÌ¿ëÇØ ÃÑ O(N)¿¡ ±¸ÇÒ ¼ö ÀÖ´Ù.


[ȨÀ¸·Î]  [µÚ ·Î]