1. 按一個按鍵,輸入一個字元 2. 按 Ctrl + A ,全選 3. 按 Ctrl + C ,複製 4. 按 Ctrl + V ,粘貼
排除明顯不划算的行為,真正的決策其實只有兩種:
1. 按一次按鍵,輸入一個字元 2. 按 k + 2 次按鍵,將現有內容複製成 k 份。
這樣一來,我們就有了一個清晰的遞推思路。設 f(n) 表示輸入 n 個字元所需要的最少按鍵次數,則 f(n) 將會在 f(n-1) + 1 和 f(n/k) + k + 2 中取一個最小值(其中 k 取遍 n 的所有約數)。 Mathematica 牛 B 就牛 B 在,這樣的動態規劃程序只需要一行便能寫完:
那麼, 20 次按鍵最多可以輸入多少個字元呢?為了解決這個問題,我們可以給出另外一個遞推式。令 g(n) 為 n 次按鍵最多可以輸入的字元個數。對於每一個 n ,考慮兩種轉移決策:要麼在 n – 1 次按鍵能夠達到的最大字元數基礎上加 1 ,要麼把 n – k 次按鍵能夠達到的字元數複製成 k – 2 份。也就是說, g(n) 就等於 g(n-1) + 1 和 g(n-k) * (k-2) 的最大值,其中 k 可以從 3 取到 n – 1。我們還是用一句話寫下這個轉移方程式:
不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看不信你看
以前做過這麼一個題 BNUOJ 4349 - 精確刷屏工具 正解的確是動態規劃 推數學公式的話。。。QAQ不會
複製粘貼,然後複製兩個字粘貼,然後複製四個字粘貼,複製八個粘貼,複製十六個粘貼,複製三十二個粘貼,複製六十四個粘貼。具體操作就是按住ctrl然後A C V A C V一直按。。
打開vim,按v選中被複製的內容,按d,然後np(n爲需複製的次數,用d是爲了省去n - 1的計算)。 若是從vim之外複製,那就到vim中按n」+p,再gg」+yG複製出來,完畢。
推薦閱讀: