标题:半集数问题-----(记忆式搜索)
问题描述:
思路图:
代码:
#include <bits/stdc++.h>
int a[50];
int comp(int k)
{
int ans=1;
if(a[k]>0) return a[k];//这一步采用了动态规划的思想
for(int i=1; i<=k/2; i++)
ans+=comp(i);
a[k]=ans;//同上
return ans;//最终返回的是ans而不是a[k],因为设置a[k],只是标记一下有的子问题已经求解出来,不需要递归到底,避免了重复.
}
int main()
{
int k;
printf("输入一个数:");
scanf("%d",&k);
printf("%d的半数集的个数为:%d",k,comp(k));
return 0;
}
程序运行结果: