题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3654

题意:把n拆成k个不同素数的和,有多少种拆法。

dp(i,j)表示数字为i时,有j个不同素数和的组合数。

先枚举素数的上界k,注意是不同素数,那就再在k个素数中做01背包,dp(i,j)+=dp(i-p,j-1)统计出现次数就行了。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3
 4 typedef long long LL;
 5 const int maxn = 1320;
 6 bool isprime[maxn];
 7 int prime[maxn];
 8 int pcnt;
 9 int n, k;
10 LL dp[maxn][maxn];
11
12 void init() {
13   memset(isprime, true, sizeof(isprime));
14   memset(prime, 0, sizeof(prime));
15   pcnt = 0;
16 }
17 void getPrime() {
18     init();
19   prime[0] = prime[1] = 0;
20   for(int i = 2; i <= maxn; i++) {
21     if(isprime[i]) prime[++pcnt] = i;
22     for(int j = 1; j <= pcnt; j++) {
23           if(i * prime[j] > maxn) break;
24         isprime[i*prime[j]] = 0;
25         if(i % prime[j] == 0) break;
26     }
27   }
28 }
29
30 int main() {
31     // freopen("in", "r", stdin);
32     // freopen("out", "w", stdout);
33     getPrime();
34     memset(dp, 0, sizeof(dp));
35     dp[0][0] = 1;
36     for(int k = 0; k < pcnt; k++) {
37         for(int i = 1120; i >= 0; i--) {
38             int bound = lower_bound(prime, prime+k, i) - prime + 1;
39             for(int j = 1; j < bound; j++) {
40                 int& p = prime[k];
41                 if(p > i) break;
42                 dp[i][j] += dp[i-p][j-1];
43             }
44         }
45     }
46     while(~scanf("%d%d",&n,&k) && n+k) {
47         printf("%lld\n", dp[n][k]);
48     }
49     return 0;
50 }

转载于:https://www.cnblogs.com/kirai/p/6096865.html

[UVa1213]Sum of Different Primes(递推,01背包)相关推荐

  1. P1759 通天之潜水(不详细,勿看)(动态规划递推,组合背包,洛谷)

    题目链接:点击进入 题目分析: 简单的组合背包模板题,但是递推的同时要刷新这种情况使用了哪些物品 ac代码: #include<bits/stdc++.h> using namespace ...

  2. P1616 疯狂的采药(洛谷,动态规划递推,完全背包)

    先上题目链接:P1616 疯狂的采药 然后放AC代码: #include<bits/stdc++.h> #define ll long long using namespace std; ...

  3. HDU-4278 Faulty Odometer 数学递推 || 八进制

    题意 这个里程表当走到3或8的时候就会跳过 给我们这个里程表上显示的数字 让我们求这个里程表的真实数据是多少 分析 由于 3 和 8 不存在 那么就相当于一个八进制数 但是这个八进制中3 是写作4 8 ...

  4. 数字滤波--递推平均滤波

    #define RM_BUF_LEN 10 /*递推数组的长度*/ uint16_t RM_Filter_Buf[RM_BUF_LEN]; /*保存数据的递推数组*/ uint16_t ADCx_Re ...

  5. 动态规划——01背包

    动态规划--01背包 1. 经典"01背包" 2. "01背包"方法归纳 3. 实战 3.1 分割等和子集 3.2 最后一块石头的重量 II 3.3 目标和 3 ...

  6. 【01背包记录路径】东东开车了

    题面 东东开车出去泡妞(在梦中),车内提供了 n 张CD唱片,已知东东开车的时间是 n 分钟,他该如何去选择唱片去消磨这无聊的时间呢 假设: CD数量不超过20张 没有一张CD唱片超过 N 分钟 每张 ...

  7. 小C的01序列(简单递推)

    题目链接:https://www.cometoj.com/contest/84/problem/B?problem_id=4305 令f[i][k]表示第sis_isi​中k对应次数,考察序列特征,发 ...

  8. 【动态规划】0-1背包递推式的剖析(通俗易懂)

    (如有错误,恳请斧正) 递推式如下: vi是第i件物品的价值,wi是第i件物品的所占空间. m(i,j) 代表的含义是:目前只考虑第1到第i件物品放入总容量为j的背包所获得的最大价值.(背包总容量不可 ...

  9. AcWing 蓝桥杯AB组辅导课 01、递归与递推

    文章目录 前言 一.递归 知识点 例题 题目1:AcWing 95.斐波那契数列[简单,递归写法] 题目2:AcWing 92.递归实现指数型枚举[简单] 题目3:AcWing 94.递归实现排列型枚 ...

最新文章

  1. linux能用airport吗_苹果下架最后两款 AirPort 产品,正式退出路由器市场
  2. 一道经典的JavaScript面试题
  3. m40型工业机器人_工业机器人在汽车生产中有的应用范围
  4. 第3章 C# 2008中面向过程的高级元
  5. 张珺 2015/07/13 个人文档
  6. 使用API Monitor监测到目标程序对系统API函数的调用(常用分析工具)
  7. c语言实验作业,C语言实验报告experience_c语言实验报告结果分析
  8. 谈谈多源数据融合-科普基本概念篇
  9. 搜狐新闻数据400w+
  10. 硬盘(IDE硬盘与SCSI硬盘)在Linux标识的命名规则
  11. 2022-03-25 redis哨兵处理failover
  12. python控制手机模拟器_Appium+python自动化23-Android夜神模拟器
  13. 自己编写代码去听网易云音乐的歌曲,以及观看MV,还可以下载奥
  14. 谷歌浏览器 android 69,如何将谷歌浏览器69及以上版本切换回旧版UI界面
  15. 开淘宝店被骗,刷信誉被骗
  16. c语言 return0作用
  17. 零基础也能快速上手的python实战项目----美多商城
  18. Lammps实现水分子在纳米颗粒球表面的吸附行为
  19. 哪个邮箱可以邮件群发?vip邮箱群发邮件软件哪个好?
  20. 【计算机考研必备常识】24考研你开始准备了吗?

热门文章

  1. Hibernate4一对一关系映射(共享主键方式)
  2. HDFS文件系统基本文件命令、编程读写HDFS
  3. 【树型DP】BZOJ1564 二叉查找树(noi2009)
  4. 面试碰到这个算法:字母异位词分组
  5. C++中的const
  6. Makefile_01:什么是Makefile?
  7. 类与类之间的交互关系
  8. Python学习教程(Python学习路线):Python3之递归函数简单示例
  9. 聊聊flink的ConnectionManager
  10. matlab练习程序(简单图像融合)