记忆化搜索只有十分,为什么?
查看原帖
记忆化搜索只有十分,为什么?
775551
caojiaming楼主2023/9/3 20:26
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,dp[1001];
int prime[251],cnt;
bool flag[1001];
int rememberdfs(int n)
{
	if(n==0)return 0;
	if(n==1)return 0;
	if(dp[n]!=0)
	{
		return dp[n];
	}
	else
	{
		int sum=0;
		for(int i=1;prime[i]<=n;i++)
		{
			sum+=rememberdfs(n-prime[i]);
		}
		dp[n]=sum;
		return sum;
	}
}
signed main()
{
	dp[2]=1;
	cin>>n;
	memset(flag,1,sizeof(flag));
	flag[0]=flag[1]=0;
	for(int i=2;i<=n;i++)
	{
		if(flag[i])
		{
			prime[++cnt]=i;
			for(int j=2*i;j<=n;j+=i)
			{
				flag[j]=0;
			}
		}
	}
	prime[cnt+1]=999999999;
	cout<<rememberdfs(n);
	return 0;
}

求改错,谢谢!

2023/9/3 20:26
加载中...