思路:
1.递归栈,超出时长
2.f[n]=f[n/2]+f[n/2-1]+...+f[1]+1;
代码:
#include<iostream>
#include<stack>
using namespace std;
//6 63 62 61 631 621
stack<int> s;
int n,top,cnt=1;
void stack1(stack<int> s, int m,int now)
{
if (now == 1) {
return;
}
for (int i = now; i >= 1; i--)
{
top = s.top();
if (i <= top/2) {
s.push(i);
stack1(s, m + 1, now/2);
cnt++;
s.pop();
}
}
}
// f[1]=1,f[2]=f[1]+1
//6 63 62 61 631 621
int f[1005];
int main()
{
cin >> n;
f[1] = 1;
for (int i = 2; i <= n; i++)
{
for (int j = 1; j <= i / 2; j++)
{
f[i] += f[j];
}
f[i]++;
}
cout << f[n];
return 0;
}
总结:递归法,时间复杂度很大