Leetcode第651題 4鍵鍵盤 C++解法
阿新 • • 發佈:2021-01-20
技術標籤:動態規劃# 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];
}
};