请求查错,代码带注释,思路是记忆化搜索
查看原帖
请求查错,代码带注释,思路是记忆化搜索
264548
Tangent233楼主2020/10/1 10:26
#include<bits/stdc++.h>
using namespace std;
bool isprime[1010];
long long prime[1010],ans[1010];
int cnt=1,answer=0;
void p(int n)
{
	isprime[1]=0;
	for(int i=2;i<=n;i++)
	{
		if(isprime[i])
		{
			int tem=i;
			prime[cnt++]=tem;
			for(int i1=2;i1*tem<=n;i1++) isprime[i1*tem]=0;
		}
	}
}//筛子
long long dfs(int n,int start)
{
    if(n==1) return 0;
    else if(ans[n]) return ans[n];
	else
    {
        for(int i=start;i>=1;i--)
        {
            if(prime[i]<=n)
            {
                ans[n]+=dfs(n-prime[i],i);
            }
        }
    }
    return ans[n];
}//记忆化搜索,问题出在这,似乎无法搜索到所有的状态
int main()
{
	memset(isprime,1,sizeof(isprime));
	int n;cin>>n;
	p(n);cnt--;
	ans[0]=ans[2]=1;
	ans[1]=0;
	dfs(n,cnt);
	for(int i=1;i<=n;i++) cout<<ans[i]<<' ';//调试代码
	//cout<<ans[n];
	return 0;
}

如题,本人的记忆化搜索似乎是无法考察到所有的状态。请求大佬修正

2020/10/1 10:26
加载中...