[蓝桥杯][算法训练VIP]摆动序列(深搜+回溯||动态规划)
生活随笔
收集整理的這篇文章主要介紹了
[蓝桥杯][算法训练VIP]摆动序列(深搜+回溯||动态规划)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
如果一個序列滿足下面的性質,我們就將它稱為擺動序列:
比如,當k = 3時,有下面幾個這樣的序列:
1 2
1 3
2 1
2 1 3
2 3
2 3 1
3 1
3 2
一共有8種,給定k,請求出滿足上面要求的序列的個數。
輸入
輸入包含了一個整數k。(k< =20)
輸出
輸出一個整數,表示滿足要求的序列個數。
樣例輸入
3
樣例輸出
8
思路:一開始以為是記憶化搜索,但是沒想出怎么記憶化,就暴力dfs+回溯試了一下,發現數列收斂的很快,沒有特別長的那種,所以時間復雜度是允許的(k<=20)。
代碼如下:
如果k再大一點,dfs就不是那么好了,因為回溯耗時也很大。那么我們考慮dp的方式。我們可以根據dfs的結果,建立一個表,在里面尋找規律。如下圖所示(圖片來源):
縱坐標代表的是k的取值,橫坐標代表的是在這k個數中選取的數的個數。
我們可以發現,橫坐標為2的時候,答案總是(k-1)*k。橫坐標再大的時候,我們就可以發現規律了。
狀態轉移方程:dp[i][j]=dp[i-1][j]+dp[i-1][j-1].
代碼如下:
時間復雜度僅僅為O(n^2)。
努力加油a啊,(o)/~
總結
以上是生活随笔為你收集整理的[蓝桥杯][算法训练VIP]摆动序列(深搜+回溯||动态规划)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2k和4k的实际观看区别(4K为什么是2
- 下一篇: Win10系统下使用360浏览器无法打开