POJ 3132 Sum of Different Primes 【01背包】
2016-10-27 20:12
417 查看
背包题还是太难太难,不是公式难,是理解公式运用公式太难
把n拆分成k个不同素数的和,有多少种方法。n不超过1120,k不超过14,一看就是个打表的题
首先把所有素数打表出来
然后,打表dp【i】【j】:把i拆分成j个不同的素数的和的方案数是多少
这个不同怎么来理解?
用01背包来理解:每个素数去参与选择,只有1次选择机会(也就是说选或者不选,那么就是循环中的第一维)
由于是01背包,那么n这个值就是第二维,而且必须是降序
得到递推式子:
dp【i】【j】=sum{dp【i-prime【x】】【j-1】},其中i-prime【x】>=0
代码如下:
把n拆分成k个不同素数的和,有多少种方法。n不超过1120,k不超过14,一看就是个打表的题
首先把所有素数打表出来
然后,打表dp【i】【j】:把i拆分成j个不同的素数的和的方案数是多少
这个不同怎么来理解?
用01背包来理解:每个素数去参与选择,只有1次选择机会(也就是说选或者不选,那么就是循环中的第一维)
由于是01背包,那么n这个值就是第二维,而且必须是降序
得到递推式子:
dp【i】【j】=sum{dp【i-prime【x】】【j-1】},其中i-prime【x】>=0
代码如下:
//#include<bits/stdc++.h> //using namespace std; #include<iostream> #include<cstdio> #include<stdio.h> #include<cstdlib> #include<stdlib.h> #include<algorithm> #include<string.h> #include<cstring> using namespace std; const int maxn=1120; const int INF=0x3f3f3f3f; int prime[maxn+1]; int dp[maxn+1][50]; void getprime(){ memset(prime,0,sizeof(prime)); for(int i=2;i<=maxn;i++){ if (!prime[i]) prime[++prime[0]]=i; for(int j=1;j<=prime[0]&&prime[j]<=maxn/i;j++){ prime[prime[j]*i]=1; if (i%prime[j]==0) break; } } } int main(){ //freopen("input.txt","r",stdin); int n,k; getprime(); //for(int i=1;i<=prime[0];i++) // printf("%d%c",prime[i],i==prime[0]?'\n':' '); memset(dp,0,sizeof(dp)); dp[0][0]=1; for(int k=1;k<=prime[0];k++) for(int i=1120;i>=1;i--) if (i>=prime[k]) for(int j=1;j<=14;j++) dp[i][j]+=dp[i-prime[k]][j-1]; while(scanf("%d%d",&n,&k)!=EOF){ if (n+k==0) break; printf("%d\n",dp [k]); } return 0; }
相关文章推荐
- POJ 3132 / ZOJ 2822 : Sum of Different Primes - 动态规划,01背包,素数筛
- POJ3132——Sum of Different Primes
- poj3132 Sum of Different Primes
- poj 3132 Sum of Different Primes(01背包)
- 5 POJ 3132 Sum of Different Primes
- poj3132 Sum of Different Primes
- 【01背包方案数】POJ-3132 Sum of Different Primes
- Poj 3132 Sum of Different Primes
- POJ 3132 & ZOJ 2822 Sum of Different Primes(dp)
- POJ 3132 Sum of Different Primes
- POJ 3132 Sum of Different Primes (DP)
- POJ 3132 & ZOJ 2822 Sum of Different Primes(dp)
- POJ 3132 Sum of Different Primes
- POJ 3132 Sum of Different Primes 动态规划 DP 0-1背包问题
- POJ 3132 Sum of Different Primes 动态规划 DP 0-1背包问题
- POJ 3132 Sum of Different Primes
- poj 3132 Sum of Different Primes——DP
- POJ 3132 Sum of Different Primes
- poj 3132 Sum of Different Primes
- POJ 3132 Sum of Different Primes 笔记