首页 > 其他 > 详细

POJ 3132 Sum of Different Primes DP背包

时间:2014-08-05 00:00:58      阅读:468      评论:0      收藏:0      [点我收藏+]

http://poj.org/problem?id=3132

题意:

给定n和k,问用恰好k个不同的质数来表示n的方案数。

分析:

n和k都很小。反正就是个背包,选k个物品恰好填满n即可。

 

 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 
 5 bool dp[1200][15];
 6 int ct[1200][15];
 7 int p[1200];
 8 bool a[1200];
 9 int n, k, size;
10 void create_prime()
11 {
12     memset(a, true, sizeof(a));
13     size = 0;
14     for (int i = 2; i <= 1120; i++){
15         if (a[i]) p[size++] = i;
16         for (int j = 2*i; j <= 1120; j += i)
17             a[j] = false;
18     }
19 }
20 int main()
21 {
22     create_prime();
23     while(scanf("%d%d", &n, &k) && (n + k))
24     {
25         memset(dp, 0, sizeof(dp));
26         dp[0][0] = true;
27         ct[0][0] = 1;
28         for (int i = 0; i < size; i++){
29             int tmp = p[i];
30             if (tmp > n) break;
31             for (int j = n; j >= tmp; j--)
32                 for (int kk = 1; kk <= k; kk++) if (dp[j-tmp][kk-1]){
33                     if (!dp[j][kk]){
34                         dp[j][kk] = true;
35                         ct[j][kk] = ct[j-tmp][kk-1];
36                     }
37                     else
38                         ct[j][kk] += ct[j-tmp][kk-1];
39             }
40         }
41         if (!dp[n][k]) ct[n][k] = 0;
42         printf("%d\n", ct[n][k]);
43     }
44     return 0;
45 }

 

POJ 3132 Sum of Different Primes DP背包,布布扣,bubuko.com

POJ 3132 Sum of Different Primes DP背包

原文:http://www.cnblogs.com/james47/p/3890993.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!