邮票组合问题

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

代码:

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

改进算法:

#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+];
int StampCnt[MAXINT] = {}; int MaxValue(int n, int m)
{
int i, j; for(i = ; ; i++)
{
StampCnt[i] = ;
for(j = ; j <= m; j++)
{
if(Stamp[j] == i)
{
StampCnt[i] = ;
break;
}
else if(i > Stamp[j])
{
StampCnt[i] = min(StampCnt[i], StampCnt[i-Stamp[j]] + );
}
} if(StampCnt[i] > n)
return i-;
}
// return 0;
} int main()
{
int N, M;
int i, j; cin >> N >> M; //5 5, 输入 1 2 4 12 21, 输出 71 memset(Stamp, , sizeof(Stamp));
for(i = ; i <= M; i++)
{
cin >> Stamp[i];
} cout << MaxValue(N, M) << endl;
}

Algorithm --> 邮票连续组合问题的更多相关文章

  1. C语言练习题_邮票组合

    背景:        我们寄信都要贴邮票,在邮局有一些小面值的邮票,通过这些小面值邮票中的一张或几张的组合,可以满足不同邮件的不同的邮资.        现在,邮局有4种不同面值的邮票.在每个信封上最 ...

  2. P1021 邮票面值设计

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

  3. UVA - 242 线性DP

    题意:给定多种邮票的组合,邮票最多只能用S张,这些邮票能组成许多不同面额,问最大连续面额的长度是多少,如果有多个组合输出组合中邮票数量最少的,如果仍有长度一致的,输出邮票从大到小排序后字典序最大的那个 ...

  4. sscanf()函数的使用及其实例

    资料引自: 传送门 sscanf函数原型: Int sscanf( const char * src, const char * format, ...); int scanf( const char ...

  5. POJ 1010 题目翻译+题解

    题目实在是太难懂了,我翻译了一下... STAMPS Description Have you done any Philately lately? 你最近有没有集邮? You have been h ...

  6. 【论文阅读】PRM-RL Long-range Robotic Navigation Tasks by Combining Reinforcement Learning and Sampling-based Planning

    目录 摘要部分: I. Introduction II. Related Work III. Method **IMPORTANT PART A. RL agent training [第一步] B. ...

  7. inno setup介绍及官方网站地址

    使 用 笔 记 1.Inno Setup 是什么?Inno Setup 是一个免费的 Windows 安装程序制作软件.第一次发表是在 1997 年,Inno Setup 今天在功能设置和稳定性上的竞 ...

  8. sscanf的用法(转)

    队长做上海邀请赛的I题时遇到一个棘手的问题,字符串的处理很麻烦,按传统的gets全部读入的话还要做N多处理,太浪费时间. 回来之后搜了一下sscanf的用法发现可以很好的解决这一类问题,各种百度,转来 ...

  9. sscanf 函数

    sscanf 函数: 从一个字符串中读进与指定格式相符的数据. 头文件: #include<stdio.h> 返回值:  sscanf("1 2 3","%d ...

随机推荐

  1. php和java中的加密和解密

    遇到的java代码如下: Cipher cipher=Cipher.getInstance("DESede/CBC/PKCS5Padding"); 在php中使用des算法 始终校 ...

  2. dojo报错总结

    dojo报错总结 1.错误一 neteaseTracker is not defined dojo.js(第15行) 2.错误二 _10 is undefined _SearchMixin.js(第5 ...

  3. Java Web项目(Extjs)报错一

    1.Java Web(Extjs)项目报错一 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -no ...

  4. Error 1313: RETURN is only allowed in a FUNCTION SQL Statement

    1.错误描述 14:07:26 Apply changes to rand_string Error 1313: RETURN is only allowed in a FUNCTION SQL St ...

  5. 易理解java代码8皇后问题

    马上就要蓝桥杯比赛了,我这些算法还是不会,确实有点慌,今天一天早上睡到很晚不愿起床,然后才开始研究8皇后问题.这也是典型的回溯与递归问题.其实本质上和马踏棋盘问题非常类似,八皇后问题呢,就是要判断主对 ...

  6. SpringMVC拦截器(包括自定以拦截器--实现HandlerInterceptorAdapter)(资源和权限管理)

    一,springmvc的配置 <!-- 访问拦截 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping ...

  7. Struts2入门这一篇就够了

    前言 这是Strtus的开山篇,主要是引入struts框架...为什么要引入struts,引入struts的好处是什么,以及对Struts2一个简单的入门.... 为什么要引入struts? 既然Se ...

  8. ES6常用知识点小结

    ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准. 因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015(简称ES2015).虽然浏览器在不 ...

  9. 【HDU 2063】过山车(二分图最大匹配模板题)

    题面 RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做partner和她同坐.但是,每 ...

  10. 机器学习-kNN

    基于Peter Harrington所著<Machine Learning in Action> kNN,即k-NearestNeighbor算法,是一种最简单的分类算法,拿这个当机器学习 ...