(ssl 1197)质数和分解#完全背包#

Description

  任何大于 1 的自然数 n,都可以写成若干个大于等于 2 ,且小于等于 n 的质数之和表达式(包括只有一个数构成的和表达式的情况),并且可能有不止一种质数和的形式。例如9 的质数和表达式就有四种本质不同的形式:
9 = 2+5+2 = 2+3+2+2 = 3+3+3 = 2+7 。
  这里所谓两个本质相同的表达式是指可以通过交换其中一个表达式中参加和运算的各个数的位置而直接得到另一个表达式。

  试编程求解自然数 n 可以写成多少种本质不同的质数和表达式。 

分析:每一个质数都能使用无限次(完全背包求方案数)

 

  • #include 
    using namespace std;
    int f[201],n,p[47]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199};
    int main(){
    	f[0]=1,scanf("%d",&n);
    	for (int i=1;i<=46;i++)
    	if (p[i]<=n)
    	for (int j=0;j<=n-p[i];j++) //某数的方案已经出来,它加上质数的数的方案加1.
    	f[j+p[i]]+=f[j];
    	printf("%d",f[n]);
    	return 0;
    }

 

 

 

你可能感兴趣的:(背包)