2 Keys Keyboard问题及解法

来源:互联网 发布:互联网办公室装修 知乎 编辑:程序博客网 时间:2024/06/09 16:19

问题描述:

Initially on a notepad only one character 'A' is present. You can perform two operations on this notepad for each step:

  1. Copy All: You can copy all the characters present on the notepad (partial copy is not allowed).
  2. Paste: You can paste the characters which are copied last time.

Given a number n. You have to get exactly n 'A' on the notepad by performing the minimum number of steps permitted. Output the minimum number of steps to get n 'A'.

示例:

Input: 3Output: 3Explanation:Intitally, we have one character 'A'.In step 1, we use Copy All operation.In step 2, we use Paste operation to get 'AA'.In step 3, we use Paste operation to get 'AAA'.

问题分析:

本题存在状态转移过程,可采用dp方法求解。其转移过程为dp[i] = dp[j] + i / j; j = n,...,1,i = 2,...,n。


过程详见代码:

class Solution {public:    int minSteps(int n) {        vector<int> dp(n + 1, 0);for (int i = 2; i <= n; i++){if (i % 2 == 0) dp[i] = dp[i / 2] + 2;else{int j = 3,flag = 0;for (; j <= (int)sqrt(n); j += 2){if (i % j == 0)                     {                        dp[i] = dp[i / j] + j;                        flag = 1;                        break;                    }}if (!flag) dp[i] = dp[1] + i;}}return dp[n];    }};


原创粉丝点击