最初在乙個記事本上只有乙個字元 『a』。你每次可以對這個記事本進行兩種操作:
copy all (複製全部) : 你可以複製這個記事本中的所有字元(部分的複製是不允許的)。
paste (貼上) : 你可以貼上你上一次複製的字元。
給定乙個數字 n 。你需要使用最少的操作次數,在記事本中列印出恰好 n 個 『a』。輸出能夠列印出 n 個 『a』 的最少操作次數。
示例 1:
輸入: 3
輸出: 3
解釋:最初, 我們只有乙個字元 『a』。
第 1 步, 我們使用 copy all 操作。
第 2 步, 我們使用 paste 操作來獲得 『aa』。
第 3 步, 我們使用 paste 操作來獲得 『aaa』。
說明:n 的取值範圍是 [1, 1000] 。
思路:動態規劃的思想,先找規律:
n=1,0次
n=2,2次,複製一次,貼上一次
n=3,3次,複製一次,貼上兩次
n=4,4次,複製一次,貼上三次。或者複製一次貼上一次得到aa,再複製一次,再貼上一次。
n=5,5次,複製一次,貼上四次。
n=6,5次,複製一次,貼上五次。或者複製一次貼上兩次得到aaa,再複製一次貼上一次。或者複製一次貼上一次得到aa再複製一次貼上兩次。
由此可以得到對於n,最多需要n次,而如果可以分解成相同的幾份,則可以減少次數,比如n=6時,目標是aaaaaa,可以分解為兩個aaa或者三個aa,所以轉移公式為:
dp[i] = min(dp[i], dp[j] + i / j);
c++**:
class solution
}return dp[n];}
};
只有兩個鍵的鍵盤 LeetCode
最初在乙個記事本上只有乙個字元 a 你每次可以對這個記事本進行兩種操作 copy all 複製全部 你可以複製這個記事本中的所有字元 部分的複製是不允許的 paste 貼上 你可以貼上你上一次複製的字元。給定乙個數字 n 你需要使用最少的操作次數,在記事本中列印出恰好 n 個 a 輸出能夠列印出 n...
只有兩個鍵的鍵盤
最初在乙個記事本上只有乙個字元 a 你每次可以對這個記事本進行兩種操作 copy all 複製全部 你可以複製這個記事本中的所有字元 部分的複製是不允許的 paste 貼上 你可以貼上你上一次複製的字元。給定乙個數字 n 你需要使用最少的操作次數,在記事本中列印出恰好 n 個 a 輸出能夠列印出 n...
只有兩個鍵的鍵盤
最初在乙個記事本上只有乙個字元 a 你每次可以對這個記事本進行兩種操作 copy all 複製全部 你可以複製這個記事本中的所有字元 部分的複製是不允許的 paste 貼上 你可以貼上你上一次複製的字元。給定乙個數字 n 你需要使用最少的操作次數,在記事本中列印出恰好 n 個 a 輸出能夠列印出 n...