[蓝桥杯][算法提高VIP]数的划分(记忆化搜索)
生活随笔
收集整理的這篇文章主要介紹了
[蓝桥杯][算法提高VIP]数的划分(记忆化搜索)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
一個正整數可以劃分為多個正整數的和,比如n=3時:
3;1+2;1+1+1;
共有三種劃分方法。
給出一個正整數,問有多少種劃分方法。
數據規模和約定
n< =100
輸入
一個正整數n
輸出
一個正整數,表示劃分方案數
樣例輸入
3
樣例輸出
3
思路:這是算法書的一道基礎分治題目,但是這個題單純用分治應該會TLE。因為會重復計算很多次,因此我們采用記憶化搜索,DP應該也可以。判斷條件如下:
dp[x][y]代表的是當前數為x,分裂的最大數值為y的情況數。
①x==0,不可能存在這種情況,返回0.
②如果當前情況已經經歷過,就直接返回結果。
③如果當前數小于分裂的最大數,那么就按照當前數作為最大分裂數。
④最大分裂數為1的時候,只有一種情況。例如6=1+1+1+1+1+1.
⑤當前數=最大分裂數的時候,返回dfs(x,y-1)+1,+1的意思是6=6這種情況,剩下的情況就是最大分裂數為5的情況了。
⑥其余的情況就是dfs(x,y-1)+dfs(x-y,y)。當前數為x,但是最大分裂數為y-1.加上當前數為x-y,最大分裂數仍為y的情況和。
代碼如下:
努力加油a啊,(o)/~
總結
以上是生活随笔為你收集整理的[蓝桥杯][算法提高VIP]数的划分(记忆化搜索)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 聊聊ChatGPT:贫道夜观天象 认为这
- 下一篇: 社交之变 2023:新世代社交平台崛起,