假设你有一个特殊的键盘,键盘上有如下键:
键1
: (A): 在屏幕上打印一个'A'。键2
: (Ctrl-A): 选择整个屏幕。键3
: (Ctrl-C): 复制选择到缓冲区。键4
: (Ctrl-V): 在屏幕上已有的内容后面追加打印缓冲区的内容。
现在,你只能按键盘上N次(使用以上四个键),找出你可以在屏幕上打印的“A”的最大数量
微信加 jiuzhang15 发送验证信息【视频】领真题考点、面试技巧等免费视频课
1 <= N <= 50
- 答案将在32位有符号整数的范围内。
样例
样例 1:
输入: 3
输出: 3
解释: A, A, A
样例 2:
输入: 7
输出: 9
解释: A, A, A, Ctrl A, Ctrl C, Ctrl V, Ctrl V
int maxA(int n)
{
vector<int> dp(n + 1);
int maxRet = 0;
if (n <= 4)
{
return n;
}
for (int i = 0; i < 4;i++)
{
dp[i] = i + 1;
}
for (int i = 4; i < n; i++)
{
int copy = dp[i - 3];
int tmp = max(i + 1, copy * 2);
dp[i] = max(tmp, dp[i]);
if (dp[i] > maxRet)
{
maxRet = dp[i];
}
int start = copy * 2;
for (int j = i + 1; j < n; j++)
{
start = start + copy;
int tmp = max(j + 1, start);
dp[j] = max(tmp, dp[j]);
if (dp[j] > maxRet)
{
maxRet = dp[j];
}
}
}
return maxRet;
}