http://ecoocs.org/contests/ecoo_2007.pdf
我æ£åœ¨ä¸ºæˆ‘所在地区的å³å°†åˆ°æ¥çš„生æ€åŒºåŸŸå¦ä¹ ,我对这一个问题感到困惑。我真的ä¸çŸ¥é“从哪里开始。
它处于“区域â€â€œè¥¿éƒ¨å’Œä¸éƒ¨â€éƒ¨åˆ†â€œé—®é¢˜3 - 多米诺链â€ã€‚
我一直在手动解决问题,我一直在考虑广度优先æœç´¢æˆ–深度优先æœç´¢ï¼Œä½†æ˜¯æœ‰ä¸¤é¢çš„多米诺骨牌æ£åœ¨ä¸¥é‡æŠ›å¼ƒæˆ‘的想法。 有没有人有任何建议,或者æŸäº›èµ„æºå¯èƒ½ä¼šè®©æˆ‘æœç€æ£ç¡®çš„æ–¹å‘å‰è¿›ï¼Ÿ
ç”案 0 :(得分:4)
看起æ¥è¿™ä¸ªé—®é¢˜éœ€è¦ä¸€ç§é€’归的回溯方法。ä¿æŒä¸€ä¸ª7乘7的对称矩阵,显示哪些数å—é™„åŠ åˆ°å“ªä¸ªã€‚ä¾‹å¦‚ï¼Œç»™å®šåˆ‡ç‰‡00 12 63 51
,您将拥有以下矩阵:
0 1 2 3 4 5 6
-------------
0|1 0 0 0 0 0 0
1|0 0 1 0 0 1 0
2|1 0 0 0 0 0 0
3|0 0 0 0 0 0 1
4|0 0 0 0 0 0 0
5|0 1 0 0 0 0 0
6|0 0 0 1 0 0 0
当您通过将图å—放置在潜在链ä¸æ¥ä½¿ç”¨å›¾å—时,将其从矩阵ä¸åˆ 除,并在通过回溯å–消图å—åŽå°†å…¶æ”¾å›žçŸ©é˜µä¸ã€‚例如,如果链当å‰åŒ…å«51 12
,则矩阵如下所示:
0 1 2 3 4 5 6
-------------
0|1 0 0 0 0 0 0
1|0 0 0 0 0 0 0
2|0 0 0 0 0 0 0
3|0 0 0 0 0 0 1
4|0 0 0 0 0 0 0
5|0 0 0 0 0 0 0
6|0 0 0 1 0 0 0
鉴于链æ¡å½“å‰ä»¥2结尾,您å¯ä»¥æ²¿ç€ç¬¬2行查看å¯ä»¥è¿žæŽ¥çš„任何数å—。找ä¸åˆ°ä»»ä½•å†…容,您å¯ä»¥å°†51 12
æ ‡è®°ä¸ºæ½œåœ¨çš„æœ€é•¿é“¾ï¼Œç„¶åŽå›žæº¯åˆ°é“¾ä»…包å«51
的状æ€ã€‚
ç»´æŠ¤ä¸€ç»„ä½ æ‰¾åˆ°çš„æ‰€æœ‰æœ€é•¿é“¾ï¼Œå¹¶åœ¨æ’入之å‰æ£€æŸ¥æ–°é“¾ä¸æ˜¯å¦å˜åœ¨è‡ªèº«æˆ–å…¶å转。
如果您找到更长的链,请开始新的一组。一旦您对所有å¯èƒ½çš„链进行了详尽的æœç´¢ï¼Œæ‚¨çš„集åˆçš„大å°åº”该是长度最长的å˜ä½“数。
ç”案 1 :(得分:2)
就个人而言,在解决这些问题时,解决这些问题的一个好方法是在一个案例ä¸å®Œæˆå®ƒä»¬ï¼ˆè€ƒè™‘到以åŽä¼šå¢žåŠ å¤æ‚性)然åŽå¢žåŠ å¤æ‚æ€§ã€‚è¿™æ ·ä½ å°±ä¸ä¼šè¢«è¿™ç§é—®é¢˜çš„å¤æ‚æ€§å’Œå‡ ä¹Žæ— ç©·æ— å°½çš„â€œwhatifsâ€æ‰€æ·¹æ²¡ã€‚
æ¤å¤–,在我å‚åŠ çš„ç¼–ç¨‹æ¯”èµ›ä¸ï¼Œ60-70ï¼…çš„å¦åˆ†è¢«æŽˆäºˆäº†ä¸€ä¸ªåŸºæœ¬é—®é¢˜æ£ç¡®çš„解决方案,然åŽæœ€ç»ˆçš„ç™¾åˆ†æ¯”æ˜¯ä½ æ£ç¡®å¤„ç†æŸäº›æ¡ˆä¾‹ã€‚我特æ„想到的情况是,我们é‡åˆ°äº†æ—…行推销员å˜ä½“çš„æ˜ å°„é—®é¢˜ï¼Œå¦‚æžœä»–ä»¬æä¾›äº†å¸¦å¾ªçŽ¯çš„å›¾è¡¨ï¼Œé‚£ä¹ˆæˆ‘çš„è§£å†³æ–¹æ¡ˆä¼šæ— ä¼‘æ¢åœ°å¾ªçŽ¯ï¼Œæˆ–者它会对æ¤åšäº›ä»€ä¹ˆã€‚
å› æ¤ï¼Œé€šè¿‡è¿™ç§æ–¹æ³•ï¼Œæˆ‘è¦åšçš„是å°è¯•å°½å¯èƒ½ç›´æŽ¥åœ°è§£å†³é—®é¢˜ï¼šæŒ‰ç…§æ–‡æ¡£ä¸çš„说明进行输入,然åŽç”¨ä½ 拥有的部分生æˆæœ€é•¿çš„链。然åŽé€šè¿‡å…许旋转件ç‰æ¥å¢žåŠ å¤æ‚性。
è™½ç„¶è¿™æ˜¯è§£å†³é—®é¢˜çš„ä¸ªäººæ–¹æ³•ï¼Œä½†å®ƒåœ¨è¿‡åŽ»ä¸€ç›´å¾ˆå¥½ã€‚æˆ‘å¸Œæœ›å®ƒä¹Ÿèƒ½ä¸ºä½ æœåŠ¡ã€‚
ç”案 2 :(得分:2)
这是dynamic programmingé—®é¢˜ï¼Œå› æ¤æ‚¨å¯ä»¥ä½¿ç”¨åŠ¨æ€ç¼–程技术解决它。
所以,如果我们有这些部分:
45 36 46 56
什么是å¯ä»¥ä»Ž4个骨骼ä¸åˆ¶ä½œçš„最长链? 显然,最长的链å¯ä»¥ç”±3å—骨头和1å—骨头制æˆã€‚
什么是å¯ä»¥ä»Ž3个骨骼制作的最长链? 显然,最长链å¯ä»¥ç”±2å—骨头和1å—骨头制æˆã€‚
什么是å¯ä»¥ä»Ž2个骨骼制作的最长链? 显然,å¯ä»¥ç”±1个骨骼和1个骨骼组æˆçš„最长链æ¡ã€‚
什么是å¯ä»¥ä»Ž1个骨骼制作的最长链? 显然,1骨是最长的链。
æˆ‘è®¤ä¸ºä½ çœ‹åˆ°è¿™é‡Œçš„æ¨¡å¼ï¼Œæˆ‘们需è¦ä½¿ç”¨é€’归。
所以如果我们有:
45 36 46 56
å‡è®¾æˆ‘们有一个函数longest_chain(set_of_pieces)
。然åŽæˆ‘们需è¦æ£€æŸ¥ï¼š
longest_chain({36 46 56}) (+ 1 if we can append 45 or 54 else discard this chain)
longest_chain({45 46 56}) (+ 1 if we can append 36 or 63 else discard this chain)
longest_chain({45 36 56}) (+ 1 if we can append 46 or 64 else discard this chain)
longest_chain({45 36 46}) (+ 1 if we can append 56 or 65 else discard this chain)
什么是longest_chain({36 46 56})
?
longest_chain({46 56}) (+ 1 if we can append 36 or 63 else discard this chain)
longest_chain({36 56}) (+ 1 if we can append 46 or 64 else discard this chain)
longest_chain({36 46}) (+ 1 if we can append 56 or 65 else discard this chain)
什么是longest_chain({46 56})
?
longest_chain({46}) (+ 1 if we can append 56 or 65 else discard this chain)
longest_chain({56}) (+ 1 if we can append 46 or 64 else discard this chain)
什么是longest_chain({46})
?两ç§å¯èƒ½æ€§ï¼š{46} {64}
我们å¯ä»¥åœ¨è¿™äº›ä¸é™„åŠ 56或65å—?是的,我们å¯ä»¥åˆ¶ä½œæ¤é“¾{46, 65}
,然åŽæˆ‘们放弃{64}
对longest_chain({56})
执行相åŒæ“作,我们得到:{56, 64}
。
å› æ¤ï¼Œæˆ‘们现在知é“longest_chain({46 56})
是{46, 65}, {56, 64}
继ç»è¿™æ ·åšç›´åˆ°å¾—到所有ç”案。
希望这有帮助。
ç”案 3 :(得分:0)
以下是我的开始。
æ ‡è®°n
多米诺骨牌D1..Dn
。
让Cm
æˆä¸ºä½¿ç”¨domines D1..Dm
(和C0 = {}
)å集形æˆçš„链的集åˆã€‚
Cm+1
是通过å°è¯•å°†Dm + 1æ’å…¥Cm
ä¸é“¾ä¸æ‰€æœ‰å¯èƒ½ä½ç½®ï¼ŒåŠ 上使用Dm+1
æ¥å°½å¯èƒ½åœ°è¿žæŽ¥æ¥è‡ª{{1}çš„ä¸ç›¸äº¤é“¾çš„对æ¥å½¢æˆçš„}ï¼ŒåŠ ä¸Šç”±Cm
组æˆçš„å•è¡Œé“¾ã€‚
ä½ å¯ä»¥åšä¸€äº›ä¼˜åŒ–(例如,订è´å¤šç±³è¯ºéª¨ç‰Œï¼‰ï¼Œä½†æˆ‘会倾å‘于在å˜å¾—过于èªæ˜Žä¹‹å‰å°è¯•è¿™æ ·åšã€‚