本题递归解法25分,递归+记忆化搜索解法(100分)

(1)递归解法

#include<iostream>
using namespace std;
int ans;
void dfs(int m)
{
  int i;
  ans++;
  for(i=1;i<=m/2;i++)
   dfs(i);    //不超过自己的一半不断的调用自己 

}

int main()
{
  int n;
  cin>>n;
  dfs(n);
  cout<<ans;
  return 0;

}

  (2)dsf+数组记忆化搜索,100分AC【每次存储中间过程,避免重复调用——妙!】 

#include<iostream>
using namespace std;

int h[1001];

void dfs(int m)
{
  int i;
  if(h[m]!=-1) return;
  h[m]=1;
  for(i=1;i<=m/2;i++)
   { dfs(i); 
      h[m]=h[m]+h[i]; //中间过程被暂存 是关键 
   }
}

int main()
{
  int n,m;
  cin>>n;
  for(int i=1;i<=n;i++) h[i]=-1;//标记过程全设为-1 
   dfs(n);
  cout<<h[n];
  return 0;

}

 

相关文章:

  • 2022-12-23
  • 2021-11-28
  • 2021-07-29
  • 2022-01-16
  • 2021-09-27
  • 2022-02-05
猜你喜欢
  • 2021-08-08
  • 2022-12-23
  • 2022-01-07
  • 2021-08-12
  • 2022-12-23
  • 2021-08-06
相关资源
相似解决方案