651. 4 Keys Keyboard
- User Accepted:262
- User Tried:454
- Total Accepted:265
- Total Submissions:928
- Difficulty:Medium
Imagine you have a special keyboard with the following keys:
Key 1: (A)
: Prints one 'A' on screen.
Key 2: (Ctrl-A)
: Select the whole screen.
Key 3: (Ctrl-C)
: Copy selection to buffer.
Key 4: (Ctrl-V)
: Print buffer on screen appending it after what has already been printed.
Now, you can only press the keyboard for N times (with the above four keys), find out the maximum numbers of 'A' you can print on screen.
Example 1:
Input: N = 3 Output: 3 Explanation: We can at most get 3 A's on screen by pressing following key sequence: A, A, A
Example 2:
Input: N = 7 Output: 9 Explanation: We can at most get 9 A's on screen by pressing following key sequence: A, A, A, Ctrl A, Ctrl C, Ctrl V, Ctrl V
Note:
- 1 <= N <= 50
- Answers will be in the range of 32-bit signed integer.
class Solution {
public:
int maxA(int N) {
int dp[N+1];
for(int i=0;i<=N;i++)
{
dp[i]=0;
}
dp[1]=1;
for(int i=2;i<=N;i++)
{
if(i>5)
{
for(int j=3;i-j>=i/2;j++)//这里可以这样优化也可以不优化你找》=0也可以ac
{
dp[i]=max(dp[i],dp[i-j]*(j-1));
}
}
else
{
dp[i]=dp[i-1]+1;
}
}
return dp[N];
}
};