1. 程式人生 > 其它 >Leetcode第651題 4鍵鍵盤 C++解法

Leetcode第651題 4鍵鍵盤 C++解法

技術標籤:動態規劃# Leetcode未完善leetcode動態規劃

我承認自己有取巧的成分,這個不能算是最佳思路,我歸納了前10個,分析出來
1、小於6的情況下,dp[i]=i;
2、在超出6的情況下,dp[i]只有兩種最大可能,要麼是經過C-A,C-C,C-V,C-V,C-V要麼是經過了C-A,C-C,C-

class Solution
{
public:
    int fourkeys_keyboard(int n)
    {
        vector<int> dp(n + 1, 0);
        for (int i = 1; i <= n; ++
i) { dp[i] = i; if (i > 6) { dp[i]=max(3*dp[i-4],4*dp[i-5]); } cout << dp[i] << " "; } return dp[n]; } };

正常解法如下,應該是遍歷兩遍。複雜度稍高,但是這種更容易接受,實際上我上面寫的,自己確實無法證明。

class Solution
{ public: int fourkeys_keyboard(int n) { vector<int> dp(n + 1, 0); for (int i = 1; i <= n; ++i) { dp[i]=dp[i-1]+1; for(int j=2;j<i;j++) dp[i]=max(dp[i],dp[j-2]*(i-j+1)); cout << dp[i] << " "
; } cout<<endl; return dp[n]; } };