题目链接:力扣https://leetcode-cn.com/problems/2-keys-keyboard/
题意:
最初记事本上只有一个字符 'A' 。你每次可以对这个记事本进行两种操作:
Copy All(复制全部):复制这个记事本中的所有字符(不允许仅复制部分字符)。
Paste(粘贴):粘贴 上一次 复制的字符。
给你一个数字 n ,你需要使用最少的操作次数,在记事本上输出 恰好 n 个 'A' 。返回能够打印出 n 个 'A' 的最少操作次数。
方法: 动态规划
class Solution {
public:
int minSteps(int n) {
vector<int> dp(n+1,INT_MAX);//最大长度为1000
dp[1]=0;//定义初始状态
for(int i=2;i<=n;i++)//枚举到n的每个元素
{
for(int j=1;j<=i/2;j++)//枚举i可能的因数
{
if(i%j==0)//假如j为i的因数
{
int tmp = i/j;//存储倍数
dp[i] = min(dp[i],dp[j]+tmp);//更新dp值
}
}
}
return dp[n];//返回dp
}
};