题目大意:
两种操作:复制全部字符,粘贴
用最少的操作,将1个A扩展成n个
思路:
每种情况,都是前一种情况粘贴字符得到,想到dp
dp[ n ] 为扩展为 n 个字符需要的最少操作
转移方程:
i表示复制的字符个数
dp[ i * j ] = min ( dp[ i ] + j )
代码:
C++
class Solution {
public:
int dp[1010];
int minSteps(int n) {
memset(dp,0x33,sizeof(dp));
dp[1] = 0;
for(int i = 1; i <= n; i++)
{
for(int j = 2; j*i <= n; j++)
{
dp[i*j] = min(dp[i*j], dp[i] + j);
}
}
return dp[n];
}
};