社区讨论

记忆化搜索只有十分,为什么?

P1832A+B Problem(再升级)参与者 3已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@lo1j71uz
此快照首次捕获于
2023/10/22 21:55
2 年前
此快照最后确认于
2023/11/02 22:49
2 年前
查看原帖
CPP
#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;
}
求改错,谢谢!

回复

6 条回复,欢迎继续交流。

正在加载回复...