1、题目
https://leetcode-cn.com/problems/2-keys-keyboard/
2、题意
题解1:dp 复制必须满足i%j==0,使得操作次数最小即i/j最小,也就是j最大,j从i/2开始枚举;
class Solution {
public:
int minSteps(int n) {
vector<int> dp(n+1,0);
dp[1] = 0;
for(int i=2;i<=n;i++)
{
dp[i] = i;
for(int j = i/2;j>1;j--)
{
if(i%j==0)
{
dp[i] = dp[j]+i/j;
break;
}
}
}
return dp[n];
}
};
题解2:贪心 d表示copy一次 复制d-1次;
class Solution {
public:
int minSteps(int n) {
int res = 0,d=2;
while(n>1)
{
while(n%d==0)
{
res+=d;
n/=d;
}
d+=1;
}
return res;
}
};