4键键盘(Leetcode651)
生活随笔
收集整理的這篇文章主要介紹了
4键键盘(Leetcode651)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
思路:動態規劃
題目中提到的有四個按鍵,但實際上,我們可以壓縮為2個選擇,因為對于最優解,Ctrl+V一定在Ctrl+A-Ctrl+C兩個按鍵后
【dp數組含義】:按鍵i次后屏幕顯示dp[i]個A
【狀態】:剩余可按鍵數量N
【選擇】:
①按A;
②按Ctrl+V(需通過額外變量j來確定Ctrl+C的位置,從而確定剪貼板中A的個數dp[j - 2])
【狀態轉移方程】:dp[i] = max(dp[i - 1] + 1, dp[j - 2] * (i - j + 1));
#include <iostream> #include <vector>using namespace std;int maxA(int N) {// dp數組含義:按鍵i次后屏幕顯示dp[i]個Avector<int> dp(N + 1, 0);// 壓縮為2個選擇 → [1]按A;[2]按Ctrl-V (包含前方必有的Ctrl-A + Ctrl-C)for (int i = 1; i <= N; i++) {// [1]按Adp[i] = dp[i - 1] + 1;// [2]按Ctrl-V (包含前方必有的Ctrl-A + Ctrl-C)//(需通過額外變量j來確定Ctrl+C的位置,從而確定剪貼板中A的個數dp[j - 2]))for (int j = 2; j < i; j++) // dp[j - 2]表示剪貼板中A的個數,減去的2即為CA + CC兩個組合鍵dp[i] = max(dp[i], dp[j - 2] * (i - j + 1)); // 最多可按(i-j)次C_V,還要加上本身,所以可以看做可按(i - j + 1)個Ctrl-V}return dp[N];}int main(){int res=maxA(499);cout<<res<<endl; } 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的4键键盘(Leetcode651)的全部內容,希望文章能夠幫你解決所遇到的問題。