當(dāng)前位置:
首頁(yè) >
[蓝桥杯][算法训练VIP]摆动序列(深搜+回溯||动态规划)
發(fā)布時(shí)間:2023/12/15
51
豆豆
生活随笔
收集整理的這篇文章主要介紹了
[蓝桥杯][算法训练VIP]摆动序列(深搜+回溯||动态规划)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目描述
如果一個(gè)序列滿足下面的性質(zhì),我們就將它稱為擺動(dòng)序列:
比如,當(dāng)k = 3時(shí),有下面幾個(gè)這樣的序列:
1 2
1 3
2 1
2 1 3
2 3
2 3 1
3 1
3 2
一共有8種,給定k,請(qǐng)求出滿足上面要求的序列的個(gè)數(shù)。
輸入
輸入包含了一個(gè)整數(shù)k。(k< =20)
輸出
輸出一個(gè)整數(shù),表示滿足要求的序列個(gè)數(shù)。
樣例輸入
3
樣例輸出
8
思路:一開(kāi)始以為是記憶化搜索,但是沒(méi)想出怎么記憶化,就暴力dfs+回溯試了一下,發(fā)現(xiàn)數(shù)列收斂的很快,沒(méi)有特別長(zhǎng)的那種,所以時(shí)間復(fù)雜度是允許的(k<=20)。
代碼如下:
如果k再大一點(diǎn),dfs就不是那么好了,因?yàn)榛厮莺臅r(shí)也很大。那么我們考慮dp的方式。我們可以根據(jù)dfs的結(jié)果,建立一個(gè)表,在里面尋找規(guī)律。如下圖所示(圖片來(lái)源):
縱坐標(biāo)代表的是k的取值,橫坐標(biāo)代表的是在這k個(gè)數(shù)中選取的數(shù)的個(gè)數(shù)。
我們可以發(fā)現(xiàn),橫坐標(biāo)為2的時(shí)候,答案總是(k-1)*k。橫坐標(biāo)再大的時(shí)候,我們就可以發(fā)現(xiàn)規(guī)律了。
狀態(tài)轉(zhuǎn)移方程:dp[i][j]=dp[i-1][j]+dp[i-1][j-1].
代碼如下:
時(shí)間復(fù)雜度僅僅為O(n^2)。
努力加油a啊,(o)/~
總結(jié)
以上是生活随笔為你收集整理的[蓝桥杯][算法训练VIP]摆动序列(深搜+回溯||动态规划)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2k和4k的实际观看区别(4K为什么是2
- 下一篇: 蓝桥杯省内模拟赛解题过程