RE 求助
查看原帖
RE 求助
533372
Benny_Li楼主2024/9/6 20:39

已使用了背包求解,但发生了 RE 错误。

link

#include <cstdio>
#include <cstring>
const int N=1005;
int n,pointer,prime[N];
long long f[N];
bool isPrime[N];

void buildPrime(){
	for(int i=2;i<N;++i){
		isPrime[i]=true;
		for(int j=0;j<pointer;++j){
			if(i%prime[j]==0){
				isPrime[i]=false;
				break;
			}
		}
		if(isPrime[i]){
			prime[pointer++]=i;
		}
	}
}
void dp(){
//	for(int i=2;i<=n;++i){
//		for(int j=0;prime[j]<=i;++j){
//			f[i]+=f[i-prime[j]];
//		}
//	}
	for(int i=0;prime[i]<=n;++i){
		for(int j=0;prime[i]+j<=n;++j){
			f[prime[i]+j]+=f[j];
		}
	}
}
void init(){
	memset(f,0,sizeof(f));
	memset(prime,0,sizeof(prime));
	memset(isPrime,0,sizeof(isPrime));
}

int main(){
	init();
	f[0]=1;
	buildPrime();
	scanf("%d",&n);
	dp();
	printf("%lld",f[n]);
}
2024/9/6 20:39
加载中...