代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=1e3+5;
int n;
bool cnt[maxn];
int f[maxn],lt[maxn],k=0;
signed main(){
cin>>n;
//cnt[0]=cnt[1]=true;
for(int i=2;i<=n;i++){
if(!cnt[i]){
lt[++k]=i;
//cout<<i<<" ";
int j=2*i;
while(j<=n){
cnt[j]=true;
j+=i;
}
//f[i]=1;
}
}
//cout<<endl;
f[0]=1;
//f[1]=0;
for(int i=2;i<=n;i++){
for(int j=1;j<=k&<[j]<i;j++){
f[i]+=f[i-lt[j]];
//printf("f[%lld]+=f[%lld],lt[%lld]=%lld,f[%lld]=%lld\n",i,i-lt[j],j,lt[j],i,f[i]);
}
if(!cnt[i]){
f[i]/=2;
f[i]+=1;
}
//cout<<i<<":"<<f[i]<<" ";
}
//cout<<endl;
cout<<f[n]<<endl;
return 0;
}
只对了第一个和第4个点,其他好像都炸了(虽然开了long long)
思路的话跟题解1差不多