ããã«åçããã°ã©ãã³ã°ïŒä»¥éãåã«ãã€ããã¯ã¹ãšåŒã³ãŸãïŒã«é¢ããèšäºãã»ãšãã©ãªãããšã«éåžžã«é©ãã ãã®ãã©ãã€ã ã¯ãããã°ã©ãã³ã°ãªãªã³ããã¯ã®æ ãè¶
ãããã®ãå«ããŠãéåžžã«åºãŸã£ãŠããããã«æããŸããã ãããã£ãŠããã®èšäºã§ãã®ã®ã£ãããåããããšããŸãã
åºæ¬
ãããããç§ãä»ãŸã§èããäžã§ããã€ããã¯ã¹ã®æé«ã®èª¬æã1ã€ã®æã§æžãããã®ã§ãã
åçããã°ã©ãã³ã°ãšã¯ã解決æ¹æ³ãæ確ã§ã¯ãªãã¿ã¹ã¯ãããããããããå°ããªã¿ã¹ã¯ã«åå²ããããšã§ãããããã解決æ¹æ³ãæ確ã§ã¯ãããŸããã ïŒcïŒA.ã¯ã¢ãã¯ã
ãã€ããã¯ã¹ã«ãã£ãŠåé¡ã解決ããã«ã¯ã次ã®ãã®ãå¿
èŠã§ãã
1ïŒãã€ããã¯ã¹ã®ç¶æ
ïŒãµãã¿ã¹ã¯ãäžæã«æå®ãããã©ã¡ãŒã¿ãŒã
2ïŒåæç¶æ
ã®å€ã
3ïŒç¶æ
éã®é·ç§»ïŒåèšç®åŒã
4ïŒåéèšã®æé ã
5ïŒåé¡ã«å¯Ÿããçãã®äœçœ®ïŒããã¯æã
åèšããŸãã¯ãäŸãã°ãããã€ãã®ç¶æ
ã®å€ã®æ倧å€ã§ãã
åèšç®æé
3ã€ã®å€æãªãŒããŒããããŸãã
1ïŒçŽæ¥æ³šæïŒ
ç¶æ
ã¯ããã§ã«èšç®ãããç¶æ
ã«åºã¥ããŠé 次åèšç®ãããŸãã

2ïŒéé ïŒ
çŸåšã®ç¶æ
ã«å¿ããŠããã¹ãŠã®ã¹ããŒã¿ã¹ãæŽæ°ãããŸãã

3ïŒã¬ã€ãžãŒãã€ããã¯ã¹ïŒ
ãã€ããã¯ã¹ã®ååž°ç
ã¡ã¢åèšç®æ©èœã ããã¯ããšããžããããã®éã®äŸåé¢ä¿ã§ããé埪ç°ç¶æ
ã°ã©ãã§ã®
ãã£ãŒããµãŒãã®ãããªãã®ã§ãã

åºæ¬äŸïŒ
ãã£ããããæ° ã¹ããŒã¿ã¹-çªå·ã
çŽæ¥æ³šæïŒ
fib[1] = 1
éé ïŒ
fib[1] = 1
ã¬ã€ãžãŒãã€ããã¯ã¹ïŒ
def get_fib(i): if (i <= 2):
3ã€ã®ãªãã·ã§ã³ãã¹ãŠã«çåœæš©ããããŸãã ãããã¯ããããç¬èªã®ã¹ã³ãŒããæã£ãŠããŸãããå€ãã®å Žåä»ã®ã¹ã³ãŒããšéè€ããŠããŸãã
å€æ¬¡å
ãã€ããã¯ã¹
1次å
ã®ãã€ããã¯ã¹ã®äŸã¯ãäžèšã®ãå€æã®é åºãã§ç€ºãããŠãããããããã«å€æ¬¡å
ããå§ããŸãã ãæ³åã®ãšããã1次å
ãšã¯ç°ãªãã枬å®ã®æ°ãã€ãŸãç¶æ
ã®ãã©ã¡ãŒã¿ãŒã®æ°ã§ãã ããã«åºã¥ãåé¡ã¯éåžžãã1察2ãã¹ããŒã ã«åºã¥ããŠãããå®éã«ã¯ç¹ã«åºæ¬çã§ã¯ãããŸããã
å€æ¬¡å
ãã€ããã¯ã¹ã¯1次å
ãšããã»ã©å€ãããŸãããããã€ãã®äŸãèŠããšããããŸãã
äŸ1ïŒSMSã®æ°
以åã¯ãé»è©±æ©ã«ãã¿ã³ããã£ãå ŽåãããŒããŒãã¯æ¬¡ã®ããã«ãªããŸããã

ãã®ãããªããŒããŒãã®ã¿ããã
k
å以äžäœ¿çšããŠãè€æ°ã®ããã¹ãã¡ãã»ãŒãžãããã€æžãããèšç®ããå¿
èŠããããŸãã
解決ç1ïŒãã€ããã¯ã¹ç¶æ
ïŒ
dp[n][m]
m
ã¿ããã䜿çšããé·ã
n
ç°ãªãã¡ãã»ãŒãžã®æ°ã
2ïŒåæç¶æ
ïŒé·ããŒãã®ã¡ãã»ãŒãžã1ã€ããããŒãã¯ãªãã¯ã䜿çšããŠ-空ã
3ïŒåèšç®åŒïŒ1åã2åã3åã®ã¯ãªãã¯ãå¿
èŠãªæžã蟌ã¿çšã®8æåãšã4åã®ã¯ãªãã¯ãå¿
èŠãª2æåããããŸãã
çŽæ¥åéèšïŒ
dp[n][m] = (dp[n - 1][m - 1] + dp[n - 1][m - 2] + dp[n - 1][m - 3]) * 8 + dp[n - 1][m - 4] * 2
ã«ãŠã³ãããŠã³ïŒ
dp[n + 1][m + 1] += dp[n][m] * 8 dp[n + 1][m + 2] += dp[n][m] * 8 dp[n + 1][m + 3] += dp[n][m] * 8 dp[n + 1][m + 4] += dp[n][m] * 2
4ïŒå€ææé ïŒ
çŽæ¥æžãå Žåãããšãã°ãå°ããª
m
ã¯ååšããªããããããªã
dp[n - 1][m - 4]
ã«åãããšãããã€ããã¯ã¹ã®å¢çãè¶ããããšã«ã€ããŠå¥ã«èããå¿
èŠããããŸãã ãããåé¿ããã«ã¯ãäžç«çãªèŠçŽ ïŒçããå€æŽããªãïŒã«é¢ããŠãã§ãã¯ãèšå®ããããæžãçããŸãã
åéèšã䜿çšãããšããã¹ãŠãããã·ã³ãã«ã«ãªããŸãããã¬ãã£ããªèŠçŽ ã«é¥ããªãããã«ãåžžã«åãåããŠããŸãã
5ïŒçãã¯ãã¹ãŠã®å·ã®åèšã§ãã
UPDïŒæ®å¿µãªããšã«ãç§ã¯ééããç¯ããŸãã-ç¶æ
ããã¡ãã»ãŒãž
n
ã®é·ããåãé€ãã ãã§ãåé¡ã1次å
ã§è§£æ±ºã§ããŸãã
1ïŒã¹ããŒã¿ã¹ïŒ
dp[m]
m
åã®ã¯ãªãã¯ã§å
¥åã§ããããŸããŸãªã¡ãã»ãŒãžã®æ°ã
2ïŒåæç¶æ
ïŒ
dp[0] = 1
3ïŒåèšç®åŒïŒ
dp[m] = (dp[m - 1] + dp[m - 2] + dp[m - 3]) * 8 + dp[m - 4] * 2
4ïŒé åºïŒ3ã€ã®ãªãã·ã§ã³ãã¹ãŠã䜿çšã§ããŸãã
5ïŒçãã¯ãã¹ãŠã®å·ã®åèšã§ãã
äŸ2ïŒéŠ¬
ãã§ã¹ã®éŠ¬ã¯ããµã€ãº
N
x
M
ããŒãäžã®ã±ãŒãž
(1, 1)
ã«ç«ã£ãŠããŸã
M
ã»ã«
(N, M)
ã«å°éããæ¹æ³ã®æ°ã4ã€ã®ã¿ã€ãã®ã¹ãããã§ã«ãŠã³ãããå¿
èŠããããŸãã

解決ç1ïŒãã€ããã¯ã¹ç¶æ
ïŒ
dp[i][j]
-
(i, j)
ã«å°éããæ¹æ³ã®æ°ã
2ïŒåæå€ïŒã»ã«
(1, 1)
äžæ¹åã§å°éã§ããŸã-äœãããŸããã
3ïŒåèšç®åŒïŒ
çŽæ¥æ³šæã®å ŽåïŒ
dp[i][j] = dp[i - 2][j - 1] + dp[i - 2][j + 1] + dp[i - 1][j - 2] + dp[i + 1][j - 2]
éé ã®å ŽåïŒ
dp[i + 1][j + 2] += dp[i][j] dp[i + 2][j + 1] += dp[i][j] dp[i - 1][j + 2] += dp[i][j] dp[i + 2][j - 1] += dp[i][j]
4ïŒãããŠä»ããã®ã¿ã¹ã¯ã§æãèå³æ·±ãéšåã¯ãé åºã§ãã ããã§ã¯ãè¡ãåã ãã移åããããšã¯ã§ããŸããã ãã以å€ã®å Žåã¯ããŸã åèšç®ãããŠããªãç¶æ
ãçŽæ¥ã®é åºã§åç
§ããæªå®æã®ç¶æ
ãéã®ã¢ãããŒãã§ååŸããããã§ãã
2ã€ã®æ¹æ³ããããŸãã
1ïŒé©åãªåé¿çãèãåºããŸãã
2ïŒã¬ã€ãžãŒãã€ããã¯ã¹ãå®è¡ãã圌女ã«ãããç解ãããŸãã
ããªããèããã®ãé¢åãªå Žå-æ dynamicãªãã€ããã¯ã¹ãå®è¡ãããšãããã¯å®ç§ã«ä»äºãããŸãã
æ lazã§ãªããã°ã次ã®ãããªåé¿çãèããããšãã§ããŸãã

ãã®é åºã«ãããçŽæ¥ã©ãŠã³ãã®åã¹ãããã§å¿
èŠãªãã¹ãŠã®ã»ã«ã®åŠçãšãå察ã®çŸåšã®ç¶æ
ã®åŠçãä¿èšŒãããŸãã
5ïŒçãã¯åã«
dp[n][m]
ãŸãã
ãã€ããã¯ã¹ãšé·ç§»ãããªãã¯ã¹
è¡åãä¹ç®ããããšããªããããã®èŠåºããç解ãããå Žåã¯ãå°ãªããšã
wikiãèªãå¿
èŠããã
ãŸã ã
äŸãã°ãæ°žé ã®ãã£ããããæ°ãªã©ãåçèšç»æ³ã«ãã£ãŠãã§ã«è§£æ±ºããåé¡ããããšä»®å®ããŸãã
å°ãäœãçŽããŸãããã ãã¯ãã«ããããŸãã

ãã¯ãã«ã®ååŸå

ã æ°åŒãå°ãéããŠã¿ãŸãããã

ã ããªãã¯ãã¯ãã«ãããããèŠãããšãã§ããŸã

ãã¯ãã«ãååŸã§ããŸã

æåã®ãã¯ãã«ã®æãç³ãŸããå€æ°ã®ã¿ãæçµãã¯ãã«ã«è¡šç€ºããããããäœããã®çš®é¡ã®è¡åãä¹ç®ããŸãã ãã®ãããªãã¯ã¹ã¯ç°¡åã«å°ãåºããŸããããã«ãããŸãïŒ

ã ãããé·ç§»è¡åãšåŒã³ãŸãã
ããã¯ããã¯ãã«ãåãå Žå

é·ç§»è¡åã
n - 1
åä¹ç®ãããšããã¯ãã«ãåŸãããŸã

ã
fib[n]
-åé¡ãžã®çãã
ãããŠä»ããªãããããã¹ãŠå¿
èŠãªã®ãã è¡åã®ä¹ç®ã«ã¯çµåæ§ã®ç¹æ§ããããŸãã

ïŒããããããã«ã¯å¯ææ§ããããŸãããããã¯ç§ã®æèŠã§ã¯é©ãã¹ãããšã§ãïŒã ãã®ããããã£ã¯ããããè¡ãæš©å©ãäžããŸãã

ã
ããã¯
ãé«é环ä¹æ³ãé©çšã§ããããã§ãã

ã åèšã§ãç®è¡æŒç®ã®å¯Ÿæ°ã®
N
ãã£ããããæ°ãèšç®ããããšãã§ããŸããã
ãããŠä»ãäŸã¯ããæ·±å»ã§ãïŒ
äŸ3ïŒãã³ã®ãªã·ãŒã±ã³ã¹
é·ã
N
ã®ãããæ³¢ã·ãŒã±ã³ã¹ãã極端ã§ãªãåèŠçŽ ã«å¯ŸããŠæ¡ä»¶ãæºããããã·ãŒã±ã³ã¹ãšããŠç€ºããŸããããã¯ããã®2ã€ã®è¿åãããå°ãããããã以äžã§ãã é·ã
N
ã®æ°åã®éžæ¯ç¶ã·ãŒã±ã³ã¹ã®æ°ãèšç®ããå¿
èŠããããŸã
N
次ã®ããã«ãªããŸãã

解決çãŸããé·ç§»è¡åã®ãªããœãªã¥ãŒã·ã§ã³ïŒ
1ïŒãã€ããã¯ã¹ç¶æ
ïŒ
dp[n][last][less]
-
last
æ¡ã§çµããé·ã
n
ã®ãããæ¯åã®æ°ã ãããŠã
less == 0
å ŽåãæåŸã®æ¡ã¯æåŸãã2æ¡ããå°ããã
less == 1
å Žåããããã倧ãããªããŸãã
2ïŒåæå€ïŒ
for last in range(10): dp[2][last][0] = 9 - last dp[2][last][1] = last
3ïŒãã€ããã¯ã¹ã®åèšç®ïŒ
for prev in range(10): if prev > last: dp[n][last][0] += dp[n - 1][prev][1] if prev < last: dp[n][last][1] += dp[n - 1][pref][0]
4ïŒåèšç®ã®é åºïŒåžžã«ä»¥åã®é·ããåç
§ãããããã®ãã¹ãã
for
ãã«ããã«ã®ã¿ã§ãã
5ïŒçãã¯åèš
dp[N][0..9][0..1]
ã§ãã
ããã§ãåæãã¯ãã«ãšããã«å¯Ÿå¿ããé·ç§»è¡åãäœæããå¿
èŠããããŸãã ãã¯ãã«ã¯ããã«çºæãããããã§ãããã¹ãŠã®ç¶æ
ã¯ã·ãŒã±ã³ã¹
N
é·ãã瀺ããŸã
N
ããŠãå€æåŒãèŠãŠãé·ç§»è¡åãå°åºãããŸãã
ãã¯ãã«ãšé·ç§»è¡å ãµãã»ã°ã¡ã³ããã€ããã¯ã¹
ããã¯ãç¶æ
ãé
åã®ãµãã»ã°ã¡ã³ãã®å¢çã§ãããã€ããã¯ã¹ã¯ã©ã¹ã§ãã äžçªäžã®è¡ã¯ãé
åã®ãã¹ãŠã®å¯èœãªãµãã»ã°ã¡ã³ãã«åºã¥ããŠãµãã¿ã¹ã¯ã®åçãèšç®ããããšã§ãã éåžžããããã¯é·ãã®å¢å é ã«ãœãŒããããèšç®ã¯ããããçãã»ã°ã¡ã³ãã«åºã¥ããŠããŸãã
äŸ4ïŒæååã®ããã¯
ããã
å±éãããç¶æ
ã§ãã ç°¡åã«ããäžåºŠèšããŸãã
å§çž®ãããè¡ãå®çŸ©ããŸãã
1ïŒæåã®ã¿ã§æ§æãããæååã¯ãå§çž®ãããæååã§ãã 圌女ã¯èªåèªèº«ãéããŸãã
2ïŒ2ã€ã®å§çž®ãããæåå
A
ãš
B
é£çµããæåå å±éãããè¡
A
ãš
B
ãé£çµããããã«å±éãããŸã
B
3ïŒæåå
D(X)
ãããã§
D
ã¯
1
ãã倧ããæŽæ°ã
X
ã¯å§çž®ãããæååã§ãã
X
ããå§çž®è§£é€ããã
D
æååã®é£çµã«å§çž®è§£é€ãããŸã
X
äŸïŒ
â3(2(A)2(B))Câ
âAABBAABBAABBCâ
å±éãããŸãã
è¡
s
å±éãããæçã®å§çž®è¡ã®é·ã
s
èŠã€ããå¿
èŠããããŸãã
解決çãã®åé¡ã¯ãããããæ¢ã«æšæž¬ãããŠããããã«ããµãã»ã°ã¡ã³ãã®ãã€ããã¯ã¹ã«ãã£ãŠè§£æ±ºãããŠããŸãã
1ïŒãã€ããã¯ã¹ç¶æ
ïŒ
d[l][r]
-æåå
s[l:r]
å±éãããæå°é·ã®å§çž®æåå
2ïŒåæç¶æ
ïŒé·ã1ã®ãã¹ãŠã®éšåæååã¯ããã®äžã§ã®ã¿å§çž®ã§ããŸãã
3ïŒãã€ããã¯ã¹ã®åèšç®ïŒ
æè¯ã®çãã¯ãããçš®ã®æçµçãªå§çž®æäœã§ããããã¯åã«å€§æåã®æååã§ãããã2è¡ã®é£çµã§ããããå§çž®ãã®ãã®ã§ãã ããã§ã¯ããã¹ãŠã®ãªãã·ã§ã³ã調ã¹ãŠãæé©ãªãã®ãéžæããŸãããã
dp_len = r - l dp[l][r] = dp_len
4ïŒåã«ãŠã³ãã®æé ïŒãµãã¹ããªã³ã°ã®çŽæ¥æé ãŸãã¯é
延ãã€ããã¯ã¹ã
5ïŒçãã¯
d[0][len(s)]
ãŸãã
ãµãããªãŒãã€ããã¯ã¹
ãµãããªãŒã«æ²¿ã£ããã€ããã¯ã¹ã®ç¶æ
ã®ãã©ã¡ãŒã¿ãŒã¯ãéåžžããã®é ç¹ãã«ãŒãã§ãããµãããªãŒã瀺ãé ç¹ã§ãã çŸåšã®ç¶æ
ã®å€ãååŸããã«ã¯ãéåžžããã¹ãŠã®åäŸã®çµæãç¥ãå¿
èŠããããŸãã ã»ãšãã©ã®å Žåã圌ãã¯ãããé
延çã«å®è£
ããŸã-圌ãã¯åã«æšã®æ ¹ããæ·±ãã§æ€çŽ¢ãæžããŸãã
äŸ6ïŒè«çããªãŒ
äžæãããããªãŒãäžããããå Žåããã®ãªãŒãã«ã¯ã·ã³ã°ã«ãããçªå·
0
ãŸãã¯
1
ãå«ãŸããŸãã æ°å€ã¯ãã¹ãŠã®å
éšé ç¹ã«ãæžã蟌ãŸããŸããã次ã®ã«ãŒã«ã«åŸã£ãŠãåé ç¹ã«å¯ŸããŠè«çæŒç®ã®1ã€ãéžæãããŸãïŒãANDããŸãã¯ãORãã ãANDãã®å ŽåãããŒã¯ã®å€ã¯ãã®ãã¹ãŠã®åã®å€ã®è«çãANDãã§ãã ãORãã®å Žåãé ç¹ã®å€ã¯ãã®ãã¹ãŠã®åã®å€ã®è«çãORãã§ãã

ã«ãŒãã®å€ãå€æŽãããããäžå¯èœã§ããããšãéç¥ããããã«ãå
éšé ç¹ã§ã®è«çæŒç®ã®æå°å€æŽæ°ãèŠã€ããå¿
èŠããããŸãã
解決ç1ïŒãã€ããã¯ã¹ç¶æ
ïŒ d[v][x]
-é ç¹v
ã§x
ã®å€ãååŸããããã«å¿
èŠãªæäœã®æ°ã ãããäžå¯èœãªå Žåãç¶æ
å€ã¯+inf
ã§ãã
2ïŒåæå€ïŒèã®å Žåãå€æŽããŒãã®å Žåã«å€ãååŸã§ããããšã¯æããã§ãããå€ãå€æŽããããšã¯ã§ããŸãããã€ãŸãã +inf
æäœã«å¯ŸããŠã®ã¿å¯èœã§ãã
3ïŒåèšç®åŒïŒ
é ç¹ã®å€ããã§ã«x
ã§ããå ŽåããŒãã§ãã ããã§ãªãå Žåã2ã€ã®ãªãã·ã§ã³ããããŸããçŸåšã®é ç¹ã§æäœãå€æŽãããã©ããã§ãã ã©ã¡ãã®å Žåããæé©ãªãªãã·ã§ã³ãèŠã€ããŠæé©ãªãã®ãéžæããå¿
èŠããããŸãã
ãAndãæäœã§ã0ããååŸããå¿
èŠãããå Žåãçãã¯å€d[i][0]
ã®æå°å€ã§ããããã§ã i
ã¯v
ã®æ¯åã§ãã
ãAndãæäœã§ã1ããååŸããå¿
èŠãããå Žåãçãã¯ãã¹ãŠã®å€d[i][1]
ã®åèšã§ããããã§ã i
ã¯v
ã®æ¯åã§ãã
æäœããORãã§ãã0ããååŸããå¿
èŠãããå Žåãçãã¯ãã¹ãŠã®å€d[i][0]
ã®åèšã§ããããã§ã i
ã¯v
ã®æ¯åã§ãã
æäœããORãã§ãã1ããååŸããå¿
èŠãããå Žåãçãã¯å€d[i][1]
ã®æå°å€ã§ããããã§ã i
ã¯v
ã®æ¯åã§ãã
4ïŒåèšç®é åºïŒæãç°¡åã«é
延çã«å®è£
ãããŸã-ã«ãŒãããã®æ·±ãã®æ€çŽ¢ã®åœ¢åŒã§ã
5ïŒçãã¯d[root][value[root] xor 1]
ã§ãã
ãµãã»ãããã€ããã¯ã¹
ãµãã»ããäžã®ãã€ããã¯ã¹ã§ã¯ãç¹å®ã®ã»ããã®ãã¹ã¯ãéåžžç¶æ
ã«ãªããŸãã ãããã¯ããã®ãã¹ã¯ã®ãŠãããæ°ãå¢å ããé åºã§æãé »ç¹ã«éžæãããå
å«ã®å°ããç¶æ
ããããããåã«ãŠã³ããããŸãã åé¿çãç¹ã«èããªãããã«ãéåžžã¯æ dynamicãªãã€ããã¯ã¹ã䜿çšãããŸãããããã¯å®å
šã«äºçŽ°ãªããšã§ã¯ãããŸããã
äŸ7ïŒæå°ééã®ããã«ããã¢ã³ãµã€ã¯ã«ããŸãã¯å·¡åã»ãŒã«ã¹ãã³åé¡
ãµã€ãº
N
éã¿ä»ãïŒãšããžã®éã¿ãè² ã§ãªãïŒã°ã©ã
G
äžããããå Žå æå°éã¿ã®
ããã«ããã¢ã³ãµã€ã¯ã« ïŒèªå·±äº€å·®ãªãã§ãã¹ãŠã®é ç¹ãééãããµã€ã¯ã«ïŒãèŠã€ããŸãã
解決çãã¹ãŠã®é ç¹ãééãããµã€ã¯ã«ãæ¢ããŠããã®ã§ããåæãé ç¹ã«ä»»æã®ãã®ãéžæã§ããŸãã ãããé ç¹çªå·
0
ãŸãã
1ïŒãã€ããã¯ã¹ç¶æ
ïŒ
dp[mask][v]
-é ç¹
0
ããé ç¹
v
ãŸã§ã®æå°éã¿ã®ãã¹ã
mask
ããããããã«æ²¿ã£ãŠãããã¹ãŠã®é ç¹ãééããŸãã
2ïŒåæå€ïŒ
dp[1][0] = 0
ãæåã¯ä»ã®ãã¹ãŠã®ç¶æ
-
+inf
ã
3ïŒåèšç®åŒïŒ
mask
ã®içªç®ã®ãããã
1
ã
i
ãã
v
ãžã®ãšããžãããå ŽåïŒ
dp[mask][v] = min(dp[mask][v], dp[mask - (1 << i)][i] + w[i][v])
ããã§ã
w[i][v]
ã¯
i
ãã
v
ãŸã§ã®ãšããžã®éã¿ã§ãã
4ïŒå€ææé ïŒæãç°¡åã§æã䟿å©ãªæ¹æ³ã¯ãã¬ã€ãžãŒãã€ããã¯ã¹ãèšè¿°ããããšã§ããããã¹ã¯ã®åæãæªããŠèšè¿°ããŠããã®äžã®åäžãããã®æ°ãå¢ããããšãã§ããŸãã
5ïŒçãã¯
d[(1 << N) - 1][0]
ãŸãã
ãããã¡ã€ã«ãã€ããã¯ã¹
ãããã¡ã€ã«ã«æ²¿ã£ããã€ããã¯ã¹ã«ãã£ãŠè§£æ±ºãããå€å
žçãªåé¡ã¯ãããã€ãã®æ°åã§ãã£ãŒã«ãã䞊ã¹ãã¿ã¹ã¯ã§ãã ããã«ãããšãã°ãã¿ã€ãªã³ã°ã®æ¹æ³ã®æ°ããŸãã¯æå°æ°ã®æ°åã§ã¿ã€ãªã³ã°ãããªã©ãããŸããŸãªããšãæ±ããããå ŽåããããŸãã
ãããã®ã¿ã¹ã¯ã¯ã

ããã§
a
ã¯1ã€ã®ã»ã«ã®ã¿ã€ãªã³ã°ã®ããªã¢ã³ãã®æ°ã§ãã ãããã¡ã€ã«ã«æ²¿ã£ããã€ããã¯ã¹ã¯ãããããã®æ¬¡å
ã®æéãç·åœ¢ã«æé©åããä¿æ°ã®ã¿ãææ°é¢æ°çã«æ®ããŸãã 次ã®ãããªãã®ãåŸãããŸãã

ã
ãããã¡ã€ã«ã¯
k
åïŒå€ãã®å Žå1åïŒã§ãæ¢ã«ã¿ã€ã«åãããŠããéšåãšãŸã ã¿ã€ã«åãããŠããªãéšåãšã®å¢çã§ãã ãã®å¢çã¯éšåçã«ããå¡ãã€ã¶ãããŠããŸããã éåžžã«å€ãã®å Žåããã€ããã¯ã¹ã®ç¶æ
ã®äžéšã§ãã

ã»ãšãã©ã®å Žåãç¶æ
ã¯ãããã¡ã€ã«ã§ããããã®ãããã¡ã€ã«ã®å Žæã§ãã ãããŠã移è¡ã«ããããã®å Žæã1ã€å¢ããŸãã ãããã¡ã€ã«ãµã€ãºã«æ¯äŸããæéã§ããããããã¡ã€ã«ããå¥ã®ãããã¡ã€ã«ã«åãæ¿ããããšãã§ãããã©ããã確èªã§ããŸãã ããã¯åã«ãŠã³ãäžã«æ¯å確èªã§ããŸãããã«ãŠã³ãããããšãã§ããŸãã 2次å
é
å
can[mask][next_mask]
ãã«ãŠã³ãããŸããè€æ°ã®å³åœ¢ãé
眮ããŠããããã¡ã€ã«ã®äœçœ®ã1ã€ãã€å¢ããããšã§ããããã¹ã¯ããå¥ã®ãã¹ã¯ã«ç§»åã§ããŸãã ã«ãŠã³ããããšãå®è¡æéãçããªããã¡ã¢ãªãå¢ããŸãã
äŸ8ïŒãããã®æ¯é
1
x
2
ããã³
2
x
1
寞æ³ã®ãããã䜿çšããŠãããŒãã«
N
x
M
ãããªããžããæ¹æ³ã®æ°ãèŠã€ããŸãã
解決çããã§ã¯ããããã¡ã€ã«ã¯åäžã®åã§ãã
0
ã¿ã€ã«åãããŠããªãåã»ã«ã
1
ã¿ã€ã«åããããã€ããªãã¹ã¯ã®åœ¢åŒã§ä¿åãããšäŸ¿å©ã§ãã ã€ãŸããåèšãããã¡ã€ã«

ã
0ïŒäºåèšç®ïŒãªãã·ã§ã³ïŒïŒãããã¡ã€ã«ã®ãã¹ãŠã®ãã¢ãå埩åŠçãããããããã¡ã€ã«ããå¥ã®ãããã¡ã€ã«ã«ç§»è¡ã§ããããšã確èªããŸãã ãã®ã¿ã¹ã¯ã§ã¯ãããã¯æ¬¡ã®ããã«æ€èšŒãããŸãã
次ã®å Žæã®æåã®ãããã¡ã€ã«ã1ã®å Žåã2çªç®ã®ãããã¡ã€ã«ã§ã¯
0
ã§ãªããã°ãªããŸãã
0
ããã¯ããã®ã»ã«ãæ°åã§åããããšãã§ããªãããã§ãã
次ã®å Žæã®æåã®ãããã¡ã€ã«ã
0
å Žåã2çªç®ã®
0
ãŸãã¯
1
2ã€ã®ãªãã·ã§ã³ããããŸãã
0
å Žåãããã¯åçŽããããé
眮ãã矩åãããããšãæå³ããŸããã€ãŸãã次ã®ã»ã«ã
1
ãšèŠãªãããšãã§ããŸãã
1
å ŽåãåçŽããããé
眮ãã次ã®ã»ã«ã«ç§»åããŸãã
é·ç§»ã®äŸïŒäžã®ãããã¡ã€ã«ããäžã®é·ç§»ã«ç§»åã§ããŸãïŒ

ãã®åŸããã¹ãŠãé
åã«ä¿å
can[mask][next_mask]
1
ãè¡ãããšãã§ããå Žåã
0
ã§ããªãå Žåã
1ïŒãã€ããã¯ã¹ã®ç¶æ
ïŒ
dp[pos][mask]
-æåã®
pos - 1
å®å
šãªã¿ã€ã«ã®æ°
pos - 1
ãããã¡ã€ã«
mask
pos - 1
åã
2ïŒåæç¶æ
ïŒ
dp[0][0] = 1
ãã£ãŒã«ãã®å·Šã®å¢çã¯çŽç·ã®å£ã§ãã
3ïŒåèšç®åŒïŒ
dp[pos][mask] += dp[pos - 1][next_mask] * can[mask][next_mask]
4ïŒãã€ãã¹é
pos
ã®å¢å é ã
5ïŒçãã¯dp [pos] [0]ã«ãããŸãã
çµæã®æŒžè¿ã¯

ã
å£ãããããã¡ã€ã«ãã€ããã¯ã¹
ããã¯ããããã¡ã€ã«ã®ãã€ããã¯ã¹ã®éåžžã«åŒ·åãªæé©åã§ãã ããã§ã¯ããããã¡ã€ã«ã¯ãã¹ã¯ã ãã§ãªãã骚æéšäœã§ããããŸãã 次ã®ããã«ãªããŸãã

ããã§ããããã¡ã€ã«ã«ãã³ã¯ãè¿œå ããåŸããã³ã¯ã®å·Šã®ã»ã«ãã«ããŒãã1ã€ã®å³ã®ã¿ãè¿œå ããŠã次ã®ç¶æ
ã«é²ãããšãã§ããŸãã ã€ãŸããç¶æ
æ°ã
N
åã«å¢ããããšã§ïŒãã¬ãŒã¯ãã©ãã«ããããèŠããŠããå¿
èŠããããŸãïŒã1ã€ã®ç¶æ
ããå¥ã®ç¶æ
ãžã®é·ç§»ã®æ°ãæžãããŸãã

åã«

ã 挞è¿æ§ã®æ¹å

åã«

ã
ãããã®ã¿ã€ã«åŒµãã®åé¡ã®äŸïŒäŸ8ïŒã«ãããç Žæãããããã¡ã€ã«ã«æ²¿ã£ããã€ããã¯ã¹ã®é·ç§»ïŒ

åçã®å埩
ãã¹ãã¢ã³ãµãŒã®ç¹æ§ãç¥ãã ãã§ã¯äžååãªå ŽåããããŸãã ããšãã°ããæååã®ãããã³ã°ãã¿ã¹ã¯ïŒäŸ4ïŒã§ã¯ãå§çž®ãããæçã®æååã®é·ãã ãã§çµãããŸãããã»ãšãã©ã®å Žåããã®é·ãã§ã¯ãªããæååèªäœãå¿
èŠã§ãã ãã®å Žåãçãã埩å
ããå¿
èŠããããŸãã
åã¿ã¹ã¯ã«ã¯çãã埩å
ããç¬èªã®æ¹æ³ããããŸãããæãäžè¬çãªæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
- ãã€ããã¯ã¹ç¶æ
ã®å€ã®æšªã«ããµãã¿ã¹ã¯ãžã®å®å
šãªå¿çãä¿æããŸãã çãã倧ããå Žåãå¿
èŠãªã¡ã¢ãªãå€ãããå¯èœæ§ããããŸãããã®ãããå¥ã®æ¹æ³ã䜿çšã§ããå Žåãéåžžã¯ããããŸãã
- äžããããæ¡ä»¶ã®ç¥å
ãç¥ã£ãŠãçãã埩å
ããŸãã å€ãã®å Žåãåãåã£ãæ¹æ³ã ããç¥ã£ãŠãçãã埩å
ã§ããŸãã åããã©ã€ã³ãããã³ã°ãã§ãçãã埩å
ããããã«ãæåŸã®ã¢ã¯ã·ã§ã³ã®ãã©ãŒã ãšãããåä¿¡ãããç¶æ
ã®ã¿ãä¿åã§ããŸãã
- è¿œå ã®ã¡ã¢ãªããŸã£ãã䜿çšããªãæ¹æ³ããããŸã-ãã€ããã¯ã¹ãåèšç®ããåŸãæåŸããæé©ãªãã¹ã«é²ã¿ãéã«æ²¿ã£ãŠçããæžããŸãã
ãã€ããŒãªæé©å
èšæ¶
å€ãã®å Žåããã€ããã¯ã¹ã§ã¯ãç¶æ
ãã«ãŠã³ããããä»ã®ç¶æ
ãéåžžã«å€ãå¿
èŠãšããªããšããåé¡ã«å¯ŸåŠã§ããŸãã ããšãã°ããã£ããããæ°ãèšç®ãããšããæåŸã®2ã€ã ãã䜿çšããåã®æ°ã«æ»ãããšã¯ãããŸããã ãããã£ãŠããããã«ã€ããŠã¯å¿ããããšãã§ããŸããã€ãŸããã¡ã¢ãªã«ä¿åããªãã§ãã ããã ããã«ããã挞è¿çã¡ã¢ãªæšå®ãæ¹åãããå ŽåããããŸãã ãã®ææ³ã¯ãäŸ1ã2ã3ïŒé·ç§»ãããªãã¯ã¹ãªãã®ãœãªã¥ãŒã·ã§ã³ïŒã7ã8ã§äœ¿çšã§ããŸãã 確ãã«ããã€ãã¹ã®é åºãé
延ãã€ããã¯ã¹ã®å Žåãããã¯ãŸã£ããæ©èœããŸããã
æé
ããçš®ã®ããŒã¿æ§é ã䜿çšããŠæŒžè¿æéãæ¹åã§ããå ŽåããããŸãã ããšãã°ã
ãã€ã¯ã¹ãã©ã®ã¢ã«ãŽãªãºã ã§ã¯ã
åªå
床ãã¥ãŒã䜿çšããŠæŒžè¿æéãå€æŽã§ããŸãã
ç¶æ
ã®çœ®æ
決å®ã«ãããŠããã€ããã¯ã¹ã«ã¯åžžã«ç¶æ
ãå«ãŸããŸããããã¯ããµãã¿ã¹ã¯ãäžæã«æå®ãããã©ã¡ãŒã¿ãŒã§ãããå¿
ããããã®ç¶æ
ãå¯äžã®ç¶æ
ã§ã¯ãããŸãããå Žåã«ãã£ãŠã¯ãä»ã®ãã©ã¡ãŒã¿ãæãã€ããŠã挞è¿çãªæéãŸãã¯èšæ¶ã®æžå°ãšãã圢ã§ãã®æ©æµãåããããšãã§ããŸããäŸ9ïŒæ°å€ã®å解
æ°N
ãããŸããŸãªçšèªã«å解ããæ°ãèŠã€ããå¿
èŠããããŸããããšãã°ãã®å ŽåN = 7
ããã®ãããªå±é5
ïŒ- 7
- 3 + 4
- 2 + 5
- 1 + 7
- 1 + 2 + 4
ç¶æ
ã®ç°ãªã2ã€ã®ãœãªã¥ãŒã·ã§ã³â1:
1) :
dp[n][k]
â
n
,
k
.
k
, , .
2) :
dp[1][1] = 1
,
dp[1][i] = 0
.
3) :
for last_summand in range(1, k + 1): dp[n][k] += dp[n - last_summand][last_summand]
4) : ,
n
.
5) â
dp[N][1..N]
.
:

, :

ã 挞è¿ïŒ

ã
â2:
1) . dp[n][k] â
n
k
. , .
2) :
dp[1][1] = 1
,
dp[1][i] = 0
.
3) :
dp[n][k] = dp[n - k][k] + dp[n - k][k - 1]
, . ( ) :
,
:

.
, â . â , , â : .
4) : ,
n
.
,

,

. , â
k
N
,

(
1
k
). ,

ã
5) â
dp[N][1..k_max]
.
挞è¿ïŒ

ã
ãããã«
äž»ãªæ
å ±æºã¯æ ¡é·ã§ãæ
å ±ã¯ãµããŒã³ã³ãã¥ãŒã¿ãŒã¹ã¯ãŒã«ïŒå
ç«¥åãïŒã§ã®è¬çŸ©ãã¢ã³ãã¬ã€ã¹ã¿ã³ã±ãããã®ãµãŒã¯ã«ãããã€ã«ããŽã©ã«ãã³ïŒdarnleyïŒã®ç¹å¥ã³ãŒã¹ããåŸãããŸããããæž
èŽããããšãããããŸããããã®èšäºã誰ãã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãïŒç§ã¯äŸ¿å©ã«ãªããŸããããèšäºãæžãããšã¯ãã¹ãŠãèŠããè¯ãæ¹æ³ã§ããããšãããããŸããã