题目描述
代码
#include<bits/stdc++.h>
using namespace std;
int n;
int f[2000]; //记忆化搜索
int dfs(int k){
//边界当加的数为1时,返回1;
if(k == 1) return 1 ;
//当数组中有值时,直接加上;
if(f[k]) return f[k];
int re = 0;
for(int i = 1;i<=k/2;i++){
//分别递归加上从1到k/2的个数。
re += dfs(i);
}
//加上自身的一种情况
f[k] = re + 1;
return f[k];
}
int main(){
cin>>n;
cout<<dfs(n)<<endl;
return 0;
}