Algorithm -- 邮票连续组合问题
邮票组合问题
有四种面值的邮票很多枚,面值分别为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 -- 邮票连续组合问题相关推荐
- 20210620 Successive projection algorithm(连续投影法)
https://en.wikipedia.org/wiki/Projections_onto_convex_sets Algorithm The POCS algorithm solves the f ...
- P1021 邮票面值设计
P1021 邮票面值设计 题目描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1-MAX ...
- 从n返回k个元素的所有组合的算法
我想编写一个函数,该函数采用字母数组作为参数,并选择多个字母. 假设您提供8个字母的数组,并希望从中选择3个字母. 然后您将获得: 8! / ((8 - 3)! * 3!) = 56 返回由3个字母组 ...
- 算法:连续邮资问题(回溯+动态规划+剪枝)
问题描述 假设国家发行了n种不同面值的邮票,并且规定每张信封上最多只允许m张邮票.连续邮资问题要求对于给定的n和m的值,给出邮票面值的最佳设计,即在1张信封上可贴出从邮资1开始,增量为1的最大连续邮资 ...
- 2016蓝桥杯C++A:剪邮票(抓取法)
七.题目:剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色所 ...
- C++经典算法题-排列组合
27.Algorithm Gossip: 排列组合 说明 将一组数字.字母或符号进行排列,以得到不同的组合顺序,例如1 2 3这三个数的排列组合有: 1 2 3.1 3 2.2 1 3.2 3 1.3 ...
- 算法题-排列组合问题
27.Algorithm Gossip: 排列组合 说明 将一组数字.字母或符号进行排列,以得到不同的组合顺序,例如1 2 3这三个数的排列组合有:1 2 3.1 3 2.2 1 3.2 3 1.3 ...
- 第五周 北理公开课的编程作业题
求取满足 #include <stdio.h>int main() {int i,j,x= 0;for (i = 0; i < 2; i++){x++;for (j = 0; j & ...
- 北大ACAM(1010STAMPS)代码
#include <iostream> #include <vector> #include <algorithm>using namespace std;/*编写 ...
最新文章
- Silverlight – Datagrid,Dataform数据验证和ValidationSummary
- c语言 枚举定义变量,C语言之枚举的定义以及测试
- 走的最急的,都是最美的风景
- P1344-[USACO4.4]追查坏牛奶Pollutant Control【网络流,最小割】
- Java反射(Reflection)
- 跨域问题解决(我只是搬运工)
- 人工智能无孔不入,电梯按键成危险区?试试用语音控制
- delphi 7 mdi子窗体。。。无法更改以命令对象为源的记录集对象的 ActiveConnection 属性。...
- 最适合写python程序的软件
- Python 代码练习
- photoshop(ps)基础入门知识 认识图层
- 笔记本无线网口共享网络给以太网口
- 第七章---8253和8255芯片
- 流程图软件最新排名,一分钟了解画流程图用什么软件
- html中蝴蝶飞飞怎么制作,幼儿园小班《蝴蝶飞飞》教案
- Matlab中Web的用法
- R语言生存分析中的OR值是什么?如何解读?
- c学前儿童语言教育试卷,学前儿童语言教育期中试卷
- 农科院环发所张西美课组招聘博后和科研助手(土壤微生物生态学)
- JAVA java学习(2)——————java下载安装与环境配置