题解:完全背包方案数问题,可能一开始看会有一点抽象,背包总容量就是输入的数的大小,每件物品就是每个质数。
1 #include<iostream> 2 #include<cstring> 3 #include<cmath> 4 using namespace std; 5 int su[201],f[201]; 6 bool pan(int x) 7 { 8 for(int i=2;i<=sqrt(x);i++) 9 if(x%i==0) return 0; 10 return 1; 11 } 12 int main() 13 { 14 int n; 15 while(cin>>n) 16 { 17 int num=0; 18 for(int i=2;i<=n;i++) 19 if(pan(i)) 20 su[++num]=i; 21 memset(f,0,sizeof(f)); 22 f[0]=1; 23 for(int i=1;i<=num;i++) 24 { 25 for(int j=su[i];j<=200;j++) 26 f[j]+=f[j-su[i]]; 27 } 28 cout<<f[n]<<endl; 29 } 30 return 0; 31 }