这道题目和普通的邮票设计不一样,我们可以展示一下题目!


邮票【问题描述】邮局发行一套票面有 n(0<n<=10)种不同面值的邮票。若限每封信所贴的邮票张数不得超过 m 枚,存在整数 r 使得用不超过 m(0<m<=2n)枚的邮票,可以贴出连续整数 1,2,3,…,r 值来,找出这种面值数,使得 r 值最大。【输入】一行,输入 N 及 M【输出】输出 R【样例】stamp. in2 3stamp. out7

放思路:

3、 邮票解题思路:DFS+回溯法。邮票问题搜索的状态应该是已经确定的邮票面值(各不相同并且总数不超过n)和它们能够贴出的最大连续邮资区间,以此来枚举下一个可能的邮票面值。因此,很自然地,使用原题中的标识符,数组 x 记录当前已经确定的邮票面值,整数 r 表示当前使用不超过 m 张邮票能贴出的最大连续邮资区间。对于第 i 层的结点,x[1…i]表示当前已经有 i 个面值确定,r 表示由 x[1…i]能贴出的最大连续区间。现在,要想把第 i 层的结点往下扩展,有两个问题需要解决:① ,哪些数有可能成为下一个的邮票面值,即 x[i+1]的取值范围是什么; ② ,对于一个确定的 x[i+1],如何更新 r 的值让它表示 x[1…i+1]能表示的最大连续邮资区间。~第一个问题很简单,x[i+1]的取值要和前 i 个数各不相同,最小应该是 x[i] + 1,最大就是 r+1,否则 r+1 没有办法表示。我们现在专注第二个问题。第二个问题自己有两种思路:一,计算出所有使用不超过 m 张 x[1…i+1]中的面值能够贴出的邮资,然后从 r+1 开始逐个检查是否被计算出来。二,从 r+1 开始,逐个询问它是不是可以用不超过 m 张 x[1…i+1]中的面值贴出来。第二种方法,由于前面 i 种邮票不能贴出 r+1,因此贴 r+1 必须要 i+1 种邮票进入,但是 i+1 种邮票需要多少张呢? 又替换哪一些呢 ? 这并不很好实现,我们换一个角度思考,还是按照方法 1 着手。
第二个问题第一种思路:定义数组 y[postage]表示用当前的面值 postage 贴出某个邮资所需要的最少的邮票数(初始时都是无穷大); S(i)表示 x[1…i]中不超过 m 张邮票的贴法的集合,S(i)中元素的值就是它所表示的贴法贴出来的邮资,于是,可以把 S(i)中的元素按照它们的值的相等关系分成 k 类。第 j 类表示贴出邮资为 j 的所有的贴法集合,用 T(j)表示,T(j)有可能是空集,例如对于{1,2,4},T(7)为空集,T(8)={{4,4}}。此时有:S(i) = T(1) U T(2) U T(3) U … U T(k),U 表示两个集合的并。现在考虑 x[i+1]加入后对当前状态 S(i)的影响。假设 s 是 S(i)中的一个元素,即 s 表示一种合法的贴法,x[i+1]对s 能贴出的邮资的影响就是x[i+1]的多次重复增加了s 能贴出的邮资。
这样说是因为有两种情况不需要考虑:一,从 s 中去掉几张邮票,把 x[i+1]加进去,这没有意义,因为从 s 中去掉几张邮票后 s 就变成了 S(i)中的另一个元素 t,我们迟早会对 t 考虑 x[i+1]的影响。二,将 x[i+1]加入 s,同时再把 x[1]也加入 s(如果 s 中还能再贴两张邮票的话),这也没有意义,原因同一。所以,x[i+1]对s 的影响就是,如果s 中贴的邮票不满m 张,那就一直贴x[i+1],直到 s 中有 m 张邮票,这个过程会产生出很多不同的邮资,它们都应该被加入到 S(i+1)中。因为 s 属于 S(i),它也必定在某个 T(k)中,而 T(k)中能产生出最多不同邮资的是 T(k)中用的邮票最少的那个元素。至此,原题中的解法就完全出来了:用数组 x 记录当前已经确定的邮票面值,用 r 表示当前最大的连续邮资区间,用数组 y 表示用当前的面值贴出某个邮资所需要的最少的邮票数。前 i 种面值的邮票,最大贴出邮资 [ 0, x[i]*m ] 。增加一种新面值 x[i+1] 的邮票,在前(i)种邮票面值最大可能取到的邮资区间范围内进行, y[ ]数组更新操作,如果前i 种邮票贴出面值为postage 的最少邮票张数 num<m,则剩下最多 m-num 张邮票,就一次去贴 k 张 x[i+1]邮票(1<=k<=m-num),更新贴出面值为 postage+k*x[i+1]面值的邮资最少需要邮票的张数 y[postage]+k。最后,在前面的各种面值邮资最少需要贴出的邮票张数数组更新完成后,查找贴面值为 x[i+1]的邮票最大的邮资连续区间能贴到多少?然后更新 r,继续 DFS 查找下一种邮票的面值,直到 n 种邮票的面值都查找完成。
回溯:当然,前 i 种邮票面值确定,当前步骤选择第 i+1 种邮票的面值可能不止 x[i+1] 这一种,那么对于 i+1 种邮票面值取其他值最大连续邮资区间的搜索,需要回溯恢复当前搜索步骤原始的最大区间 r 的值和 y[ ]数组的值。

最后实现的代码::

#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int x[10];
int n,m,r;
int y[100001];
int ls[1001];
int calc(int new_i){int i;int max=0;for(i=1;i<=1000;i++)ls[i]=0;int len=0;for(i=1;i<=r;i++){if(y[i]<m){int ts_y=y[i];int ts_i=i;while(ts_y<n){ts_i+=x[new_i];ts_y++;}ls[++len]=ts_i;}int max_n=0;sort(ls+1,ls+len+1);for(int k=2;k<=len;k++)if(ls[k]-1!=ls[k-1])max_n=k-1;if(max_n>max)max=max_n;}return max;
}
void search(int i,int r){int j;for(j=x[i-1]+1;j<=r+1;j++){x[i]=j;int max_r=calc(i);if(max_r>r)r=max_r;if(i<n)search(i+1,r);else{printf("%d\n",r);exit(0);}}
}
int main(){freopen("stamp.in","r",stdin);freopen("stamp.out","w",stdout);int i,j,k,n,m;scanf("%d%d",&n,&m);for(i=1;i<=m;i++)y[i]=i;x[1]=1;search(2,m);return 0;
}

—————啊!怎么办,完了,这个还是没有过的!!!555,明天再发标程,一抹一样的标题,好吧,必须有点改动,555


—————————————————————————————————————————————————————

stamp 邮票设计 搜索02相关推荐

  1. 使用Q查询设计搜索框

    1 # 使用Q查询设计搜索框 2 3 # 使用stark时,用户可以自定义搜索字段配置,而配置的字段是一个列表,因此要使用到方法二 4 from django.db.models import Q 5 ...

  2. 小啊呜产品读书笔记001:《邱岳的产品手记-02》 开篇词 产品经理的世界没有对错 01讲 验证码是个好设计吗 02讲 产品经理工具指南 03讲 产品案例分析·Trigraphy的设计哲学

    小啊呜产品读书笔记001:<邱岳的产品手记-02> 开篇词 产品经理的世界没有对错 & 01讲 验证码是个好设计吗 & 02讲 产品经理工具指南 & 03讲 产品案 ...

  3. 《设计搜索体验:搜索的艺术与科学》迷你书

    <设计搜索体验:搜索的艺术与科学>迷你书 这是一本从实践角度系统讲解搜索产品体验设计的著作,是搜索体验设计领域的标杆性著作,由资深搜索体验设计专家撰写,腾讯用户体验与设计部"CD ...

  4. 算法提高 邮票面值设计 搜索 动态规划

    算法提高 邮票面值设计 时间限制:1.0s   内存限制:256.0MB 问题描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤13)种邮票的情况下(假定所有的邮票数量都足够),如何设 ...

  5. 支付宝体验设计精髓. 02 无规矩不成方圆

    02 无规矩不成方圆 -设计规范的建设 文/ 周建波.朱兰民 第1节 规矩成就方圆 孟子曰:离娄之明,公输子之巧,不以规矩,不能成方圆.-<孟子> 设计规范是用户体验的最低标准!-吴明 支 ...

  6. LeetCode 642. 设计搜索自动补全系统(Trie树)

    文章目录 1. 题目 2. 解题 1. 题目 为搜索引擎设计一个搜索自动补全系统. 用户会输入一条语句(最少包含一个字母,以特殊字符 '#' 结尾). 除 '#' 以外用户输入的每个字符,返回历史中热 ...

  7. 电商后台设计——搜索

    我们在进行网上购物时,可以直接利用搜索功能查找想要的商品,十分快捷方便:为了方便我们的更快的找到,搜索后会根据系统内部的逻辑进行查找:本文作者详细介绍了电商平台的搜索原理以及搜索功能. 电商平台商品成 ...

  8. 智能logo免费体验|网站Logo这样设计搜索排名跟着提升

    简介:一个好的网站logo,不仅让用户一眼知道网站品牌传递的信息,还能提高网站专业度和丰富度,增加SEO搜索排名.今天分享下如何设计一款实用的网站logo.阿里云智能logo设计,在线免费体验logo ...

  9. APP设计|搜索页面设计灵感

    用户进行搜索的首要目的就是:快速找到自己想要的结果!搜索页面是用户进行搜索的第一站,最理想的状态就是用户不用打字就能够进行搜索,所以搜索页承担着增强用户搜索效率的作用. 搜索几乎是现在所有APP的标配 ...

最新文章

  1. 浅谈Generator和Promise原理及实现
  2. spring的自生一个bug
  3. SQL server 2005中无法新建作用(Job)的问题
  4. php万年历月份处理_php实现万年历的完整代码
  5. java 重载 不可_深入深刻深到不能再深的理解java中的重载和重写
  6. Java加密与解密的艺术~Security
  7. quora html5,英语口语练习_Quora精选:外国人眼中5个最美英文单词_沪江英语
  8. html和css动画效果,css过渡和css动画的区别是什么?
  9. Remoting: Server encountered an internal error
  10. mysqlsla安装与慢查询分析
  11. 算法选择_快速筛出topK的快速选择算法
  12. 百度盘搜失效?这款网盘搜索神器万万别错过!
  13. 一步步构造自己的vue2.0+webpack环境
  14. 汉字转拼音首字母大写
  15. Java8流List转Map
  16. 计算机蓝屏代码0x0000007b,解决电脑蓝屏出现代码0x0000007b怎么解决
  17. 虚拟机安装win10 x64系统
  18. pink老师 JS p61课后作业
  19. 波波腾机器人_加入 Beta 版“机器人bobo” - TestFlight - Apple
  20. 安全牛《2020中国网络安全企业100强报告》发布

热门文章

  1. vue3(vite)设置代理,封装axios,api解耦
  2. 土圭垚㙓数学课(四)空间变换
  3. 考进中科院计算所:我的经历和体会
  4. openssl 的 tls 命令和相关使用心得
  5. cmstop中的视图view
  6. windows下的BT服务器搭建方案
  7. 联通3G上网卡资费每月最低75元 套餐自动升级
  8. 微型计算机的主要硬件以及技术指标,微型计算机的主要技术指标?
  9. 作为一个技术Leader,要如何去提升团队的技术氛围
  10. java对接图灵机器人搭建自己的智能机器人