\[\Large\text{翻幣問題}\]
\[Time~Limit:1000MS~~Memory~Limit:65536K\]編程
有N個硬幣(6<=N<=20000)所有正面朝上排成一排,每次將其中5個硬幣翻過來放在原位置,直到最後所有硬幣翻成反面朝上爲止。試編程找出步數最少的翻法,輸出最少步數及翻法。spa
從鍵盤輸入一個正整數N(6<=N<=20000),表示硬幣的數量。3d
第1行:一個整數,表示最少步數
第2行至最後一行:先是一個整數,表示步驟序號(從0開始編號),後接一個":",再接當前硬幣的狀態(用一個整數表示正面朝上的硬幣的個數)code
6 (開始:6個硬幣正面朝上)
0:6 (第0步結果:6個硬幣正面朝上) 1:1 (第1步結果:1個硬幣正面朝上) 2:4 (第2步結果:4個硬幣正面朝上) 3:3 (第3步結果:3個硬幣正面朝上) 4:2 (第4步結果:2個硬幣正面朝上) 5:5 (第5步結果:5個硬幣正面朝上) 6:0 (第6步結果:0個硬幣正面朝上) 6 (最少用6步實現所有反面朝上)
判重是必須的blog
假設當前狀態是正面的個數,那麼便有\(6\)種變化:
正面個數是\(x\in \{5,4,3,2,1,0\}個\)
變化後都是\(5-x\)個ip
還有個條件,由於只能翻\(5\)個,因此正面的個數和反面的個數要大於其對應的翻轉數input
綜上所述,您能it