描述

给定一个信封,最多只允许粘贴N张邮票,计算在给定M(N+M<=10)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大max ,使得1~max之间的每一个邮资值都能得到。

例如,N=3,M=2,如果面值分别为1分、4分,则在l分~6分之间的每一个邮资值都能得到(当然还有8分、9分和12分):如果面值分别为1分、3分,则在1分~7分之间的每一个邮资值都能得到。可以验证当N=3,M=2时,7分就是可以得到连续的邮资最大值,所以MAX=7,面值分别为l分、3分。

样例输入:共一行,两个整数,分表为N与M的值。

格式

输入格式

一行,分别为N,M。

输出格式

两行。

第一行为m种邮票的面值,按升序排列,各数之间用一个空格隔开。

第二行为最大值。

如果有多解,输出字典序最大的一个。

样例1

样例输入1[复制]

 
3 2

样例输出1[复制]

 
1 3
MAX=7

限制

各个测试点1s

来源

NOIP1999

(转自https://vijos.org/p/1179)


  这道题首先看数据范围就大概能够猜出是搜索,可是,出现了以下问题

  1)搜索的范围,不可能从1搜到1000

  2)如何求MAX

  先来思考问题二,首先回顾一下求出面值为i所需最少的邮票怎么求,用动规对不对?

f[i] = min(f[i - 面额] + 1, f[i]),这样求的对不对?

  那从1一直往下做,求到某个f[i] > n,说明什么?i这个面值不能用要超过n张的邮票

凑出来,故MAX = i - 1

  问题二解决了,然后来解决问题一,首先上限,很容易想到,当前的MAX + 1,为什么

不能是MAX + 2,或者更多,因为MAX + 1就凑不出来了。然后来思考下限,前一个面额 + 1?

如果比它少会发生什么?MAX貌似不会改变。所以得到了这个范围[前一个面额 + 1, 当前MAX]

  接下来附上代码

Code

 /**
* vijos.org
* Problem#1179
* Accepted
* Time:107ms
* Memory:568k
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
using namespace std;
int buf[];
int ans[];
int f[];
int n ,k;
int maxv = ;
int cale(int count){
if(!count) return ;
memset(f, 0x7f, sizeof(f));
f[] = ;
int i = ;
do{
for(int j = ;j <= count && buf[j] <= i;j++)
f[i] = min(f[i - buf[j]] + , f[i]);
}while(f[i++] <= n);
return i - ;
}
void search(int sec){
if(sec >= k){
int c = cale(k);
if(c <= maxv) return;
for(int i = ;i <= k; i++)
ans[i] = buf[i];
maxv = c;
return;
}else{
int temp = cale(sec);
for(int i = temp + ;i > buf[sec]; i--){
buf[sec + ] = i;
search(sec + );
}
}
}
int main(){
cin >> n >> k;
search();
for(int i = ;i <= k;i++)
cout<<ans[i]<<" ";
cout<<endl;
cout<<"MAX="<<maxv;
return ;
}

noip 邮票面值设计 - 搜索 - 动态规划的更多相关文章

  1. P1021 邮票面值设计——搜索+完全背包

    P1021 邮票面值设计 题目意思是你最多用n张邮票,你可以自己设定k种邮票的面值,每种邮票数量无穷,你最多能用这k种邮票在不超过n张的情况下,组合成的价值要求是从1开始连续的, 求最大能连续到多少: ...

  2. NOIP1999邮票面值设计[搜索|DP]

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

  3. 邮票面值设计 (动态规划+DFS)

    题意:https://ac.nowcoder.com/acm/problem/16813 思路: 深度搜索:每一层枚举一个面值,然后通过dp进行检查,并通过已知面值得到最多n张得到的最大表示数. 其实 ...

  4. 深搜+DP剪枝 codevs 1047 邮票面值设计

    codevs 1047 邮票面值设计 1999年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description ...

  5. P1021 邮票面值设计

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

  6. [NOIP1999提高] CODEVS 1047 邮票面值设计(dfs+dp)

    dfs出邮票的各种面值,然后dp求解. ------------------------------------------------------------------------------- ...

  7. P1021 邮票面值设计(dfs+背包dp)

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

  8. Java实现 蓝桥杯VIP 算法提高 邮票面值设计

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

  9. 洛谷P1021邮票面值设计 [noip1999] dp+搜索

    正解:dfs+dp 解题报告: 传送门! 第一眼以为小凯的疑惑 ummm说实话没看标签我还真没想到正解:D 本来以为这么多年前的noip应该不会很难:D 看来还是太菜了鸭QAQ 然后听说题解都可以被6 ...

随机推荐

  1. Reading table information for completion of table and column names

    mysql> use ad_detail_page;Reading table information for completion of table and column namesYou c ...

  2. msc文件

    MSC微软管理控制台(Microsoft Management Control)文件.可以点击开始/运行,然后输入下列文件名就可以打开相应的控制窗口. 除第三个文件外,其他均在C:\WINDOWS\s ...

  3. 2018/03/20 每日一个Linux命令 之 cp

    cp 命令用于复制文件/目录 cp [-参数] [复制文件] [复制成为的新文件] 参数(这里只介绍平常会用到的,之后的话遇到再回来补充) -f 覆盖已经存在的目标文件而不给出提示. -i 与-f选项 ...

  4. GDB调试qemu源码纪录

    今天介绍下如何利用gdb调试qemu 1.首先获取qemu源码 获取地址:https://www.qemu.org/ 2.编译安装qemu 进入qemu目录 ./configure --enable- ...

  5. javaScript高级教程(七)正则表达式中括号三种常见作用

    括号用来将子表达式标记起来,以区别于其他表达式 比如很多的命令行程序都提供帮助命令,键入 h 和键入 help 的意义是一样的,那么就会有这样的表达式: h(elp)? 字符h之后的elp可有可无这里 ...

  6. 1.如何修改oracle的密码

    在下图中的目录下面找到 PWDorcl.ora 文件,orcl是数据库的实例名  备份,将PWDorcl.ora 文件名称改为 PWDorcl_back.ora 以管理员身份打开cmd,执行 orap ...

  7. eigen quick reference

    参考: http://eigen.tuxfamily.org/dox/AsciiQuickReference.txt // A simple quickref for Eigen. Add anyth ...

  8. testng入门教程6 TestNG忽略测试

    有时,我们的代码是没有准备好,如果测试用例写入到测试方法/代码将无法运行,在这种情况下,@Test(enabled = false)有助于禁用此测试案例. 测试方法是标注了@Test(enabled ...

  9. CUDA显卡运算编程菜鸟入门指南1——Hello world - yfszzx的专栏 - 博客频道 - CSDN.NET

    第一次知道有显卡(GPU)编程这个东西,是去年比特币最热门的时候,看了几篇关于比特币的文章,说比特币挖矿要靠显卡,CPU的速度与GPU根本就没法比,于是就非常好奇,显卡是什么神奇的东西?为什么运算速度 ...

  10. kendo 级联加带搜索的下拉框以及js赋值

    1‘.js给下拉框赋值 $("#UserRole").data("kendoDropDownList").value(dataItem.RoleName); $ ...