zoukankan      html  css  js  c++  java
  • LeetCode 651. 4 Keys Keyboard

    原题链接在这里:https://leetcode.com/problems/4-keys-keyboard/description/

    题目:

    Imagine you have a special keyboard with the following keys:

    Key 1: (A): Print 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. 1 <= N <= 50
    2. Answers will be in the range of 32-bit signed integer.

    题解:

    DP问题.

    初始化, dp[i] = i. i在[1,N]就是直接输入'A'.

    状态转移, dp[i] = Math.max(dp[i], (i-j-1)*dp[j]), j在[1,i-3]区间内.  Ctrl A, Ctrl C, Ctrl V用了3个操作,所以j是到i-3. 本来已经有了d[j]个'A', 三个操作做完又加了dp[j]个'A', 还剩下i-3-j个操作,剩下的每一次都加dp[j]个'A'. 总共dp[j] + dp[j] + (i-3-j)*dp[j] = (i-j-1)*dp[j]. 

    答案dp[N].

    Time Complexity: O(N^2).

    Space: O(N).

    AC Java:

     1 class Solution {
     2     public int maxA(int N) {
     3         int [] dp = new int[N+1];
     4         for(int i = 1; i<=N; i++){
     5             dp[i] = i;
     6             for(int j = 1; j<=i-3; j++){
     7                 dp[i] = Math.max(dp[i], (i-j-1)*dp[j]);
     8             }
     9         }
    10         return dp[N];
    11     }
    12 }

    类似2 Keys Keyboard.

  • 相关阅读:
    HDU 5795
    HDU5783
    HDU 5791
    VK Cup 2016
    Codeforces Round #357 (Div. 2)
    Educational Codeforces Round 15
    HDU5724
    博弈学习 3
    Spring的多配置文件加载
    spring 核心技术
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/7575154.html
Copyright © 2011-2022 走看看