題目:
###該題主要考察遞推、遞歸?
將該題看成若干個子問題
#include<bits/stdc++.h>
using namespace std;
const int N=20;
int a[N];int dfs(int dep){int res=1;for(int i=1;i<=a[dep-1]/2;++i){a[dep]=i;res+=dfs(dep+1);}return res;
}int main(){int n;cin>>n;a[1]=n;cout<<dfs(2)<<'\n';return 0;
}
?
?整體思路:
- 開設一個數組存放數字,第一個數字永遠為n,所以設為n
- 從dep搜索深度2開始逐層搜索,將該層的數字實時轉換為i,數字個數res每次都要加上下一層的符合條件的數字個數,輸出返回的數字個數res即可
###如果還是不明白可以拿張紙自己推一下,每個當前層必定確定有一個數,畫出來的圖有多少個節點就有多少種可能,每層有多少個節點,在該搜索深度就循環了多少次