邮票组合问题

有四种面值的邮票很多枚,面值分别为1,4,12,21,取五张,求取出这些邮票的最大连续组合值

代码:

#include <stdio.h>
#include <string.h>#define N 5
#define M 5
int k, Found, Flag[N];
int Stamp[M] = {0, 1, 4, 12, 21};// 在剩余张数n中组合出面值和Value
int Combine(int n, int Value)
{if(n >= 0 && Value == 0){Found = 1;int Sum = 0;for(int i=0; i<N && Flag[i] != 0; i++){Sum += Stamp[Flag[i]];printf("%d ", Stamp[Flag[i]]);}printf("\tSum=%d\n\n", Sum);}else{    for(int i=1; i<M && !Found && n>0; i++)if(Value-Stamp[i] >= 0) {Flag[k++] = i;Combine(n-1, Value-Stamp[i]);Flag[--k] = 0;}  }return Found;
}int main(int argc, char* argv[])
{for(int i=1; Combine(N, i); i++, Found=0);
}

改进算法:

#include <iostream>
#include <string.h>
using namespace std;#define MAX 10
#define MAXINT 100000#define min(a, b) ((a) >= (b) ? (b) : (a))int Stamp[MAX+1];
int StampCnt[MAXINT] = {0};int MaxValue(int n, int m)
{int i, j;for(i = 1; ; i++){StampCnt[i] = 201;for(j = 1; j <= m; j++){if(Stamp[j] == i){StampCnt[i] = 1;break;}else if(i > Stamp[j]){StampCnt[i] = min(StampCnt[i], StampCnt[i-Stamp[j]] + 1);}}if(StampCnt[i] > n)return i-1;}//  return 0;
}int main()
{int N, M;int i, j;cin >> N >> M;  //5 5, 输入 1 2 4 12 21, 输出 71
memset(Stamp, 0, sizeof(Stamp));for(i = 1; i <= M; i++){cin >> Stamp[i];}cout << MaxValue(N, M) << endl;
}

转载于:https://www.cnblogs.com/jeakeven/p/4631377.html

Algorithm -- 邮票连续组合问题相关推荐

  1. 20210620 Successive projection algorithm(连续投影法)

    https://en.wikipedia.org/wiki/Projections_onto_convex_sets Algorithm The POCS algorithm solves the f ...

  2. P1021 邮票面值设计

    P1021 邮票面值设计 题目描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1-MAX ...

  3. 从n返回k个元素的所有组合的算法

    我想编写一个函数,该函数采用字母数组作为参数,并选择多个字母. 假设您提供8个字母的数组,并希望从中选择3个字母. 然后您将获得: 8! / ((8 - 3)! * 3!) = 56 返回由3个字母组 ...

  4. 算法:连续邮资问题(回溯+动态规划+剪枝)

    问题描述 假设国家发行了n种不同面值的邮票,并且规定每张信封上最多只允许m张邮票.连续邮资问题要求对于给定的n和m的值,给出邮票面值的最佳设计,即在1张信封上可贴出从邮资1开始,增量为1的最大连续邮资 ...

  5. 2016蓝桥杯C++A:剪邮票(抓取法)

    七.题目:剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色所 ...

  6. C++经典算法题-排列组合

    27.Algorithm Gossip: 排列组合 说明 将一组数字.字母或符号进行排列,以得到不同的组合顺序,例如1 2 3这三个数的排列组合有: 1 2 3.1 3 2.2 1 3.2 3 1.3 ...

  7. 算法题-排列组合问题

    27.Algorithm Gossip: 排列组合 说明 将一组数字.字母或符号进行排列,以得到不同的组合顺序,例如1 2 3这三个数的排列组合有:1 2 3.1 3 2.2 1 3.2 3 1.3 ...

  8. 第五周 北理公开课的编程作业题

    求取满足 #include <stdio.h>int main() {int i,j,x= 0;for (i = 0; i < 2; i++){x++;for (j = 0; j & ...

  9. 北大ACAM(1010STAMPS)代码

    #include <iostream> #include <vector> #include <algorithm>using namespace std;/*编写 ...

最新文章

  1. Silverlight – Datagrid,Dataform数据验证和ValidationSummary
  2. c语言 枚举定义变量,C语言之枚举的定义以及测试
  3. 走的最急的,都是最美的风景
  4. P1344-[USACO4.4]追查坏牛奶Pollutant Control【网络流,最小割】
  5. Java反射(Reflection)
  6. 跨域问题解决(我只是搬运工)
  7. 人工智能无孔不入,电梯按键成危险区?试试用语音控制
  8. delphi 7 mdi子窗体。。。无法更改以命令对象为源的记录集对象的 ActiveConnection 属性。...
  9. 最适合写python程序的软件
  10. Python 代码练习
  11. photoshop(ps)基础入门知识 认识图层
  12. 笔记本无线网口共享网络给以太网口
  13. 第七章---8253和8255芯片
  14. 流程图软件最新排名,一分钟了解画流程图用什么软件
  15. html中蝴蝶飞飞怎么制作,幼儿园小班《蝴蝶飞飞》教案
  16. Matlab中Web的用法
  17. R语言生存分析中的OR值是什么?如何解读?
  18. c学前儿童语言教育试卷,学前儿童语言教育期中试卷
  19. 农科院环发所张西美课组招聘博后和科研助手(土壤微生物生态学)
  20. JAVA java学习(2)——————java下载安装与环境配置

热门文章

  1. SQLSERVER对数据表进行分区
  2. 求浮点数的幂的精确值
  3. mysql与php6_PHP与MySQL的连接
  4. redis关闭/重启服务器
  5. Oracle MERGE用法
  6. CppUnit源代码分析总结
  7. Web后端学习笔记 Flask(11)Local线程隔离对象
  8. SVM支持向量机习题解答
  9. Dijkstra算法 最短路径
  10. python异常的处理机制_python异常和文件处理机制详解