CODEVS1047 邮票面值设计
给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤40)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1~MAX之间的每一个邮资值都能得到。
例如,N=3,K=2,如果面值分别为1分、4分,则在1分~6分之间的每一个邮资值都能得到(当然还有8分、9分和12分);如果面值分别为1分、3分,则在1分~7分之间的每一个邮资值都能得到。可以验证当N=3,K=2时,7分就是可以得到的连续的邮资最大值,所以MAX=7,面值分别为1分、3分。
N和K
每种邮票的面值,连续最大能到的面值数。数据保证答案唯一。
3 2
1 3
MAX=7
动态规划加深搜,每枚举一种邮票面值为a[i]的邮票,可能有的最大值在a[i]+1到a[i]*k+1之间。思路是枚举所有可能的邮票组合方式,即枚举面值,分别求得每一种组合方式能得到连续最大能到的面值数,并记录当前的组合方式,就能不断更新这个最大面值数。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,k,maxn;
int a[];
int num[];
int ans[];
void dp()
{
int i=;
num[]=;
while(num[i]<=n)
{
i++;
num[i]=;
for(int j=;j<k&&i>=a[j];j++)
{
if(num[i-a[j]]+<num[i])
num[i]=num[i-a[j]]+;
}
}
if(i->maxn)
{
maxn=i-;
for(int j=;j<k;j++)
ans[j]=a[j];
}
}
void dfs(int step)
{
if(step==k)
{
dp();
return;
}
for(int i=a[step-]+;i<=a[step-]*n+;i++)
{
a[step]=i;
dfs(step+);
}
}
int main()
{
scanf("%d%d",&n,&k);
maxn=;
dfs();
for(int i=;i<k;i++) printf("%d ",ans[i]);
printf("\nMAX=%d",maxn);
return ;
}
CODEVS1047 邮票面值设计的更多相关文章
- 深搜+DP剪枝 codevs 1047 邮票面值设计
codevs 1047 邮票面值设计 1999年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description ...
- [NOIP1999提高] CODEVS 1047 邮票面值设计(dfs+dp)
dfs出邮票的各种面值,然后dp求解. ------------------------------------------------------------------------------- ...
- P1021 邮票面值设计
P1021 邮票面值设计 题目描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1-MAX ...
- P1021 邮票面值设计——搜索+完全背包
P1021 邮票面值设计 题目意思是你最多用n张邮票,你可以自己设定k种邮票的面值,每种邮票数量无穷,你最多能用这k种邮票在不超过n张的情况下,组合成的价值要求是从1开始连续的, 求最大能连续到多少: ...
- P1021 邮票面值设计(dfs+背包dp)
P1021 邮票面值设计 题目传送门 题意: 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15N+K≤15)种邮票的情况下 (假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大 ...
- Java实现 蓝桥杯VIP 算法提高 邮票面值设计
算法提高 邮票面值设计 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤13)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮 ...
- 1047 邮票面值设计 (DFS+DP)
题目描述 Description 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤40)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1-MAX之 ...
- 洛谷P1021 邮票面值设计
题目描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1-MAX之间的每一个邮资值都能得到 ...
- 洛谷P1021邮票面值设计 [noip1999] dp+搜索
正解:dfs+dp 解题报告: 传送门! 第一眼以为小凯的疑惑 ummm说实话没看标签我还真没想到正解:D 本来以为这么多年前的noip应该不会很难:D 看来还是太菜了鸭QAQ 然后听说题解都可以被6 ...
随机推荐
- Win7窗口操作
1.使用 Aero Shake 晃动最小化打开的窗口您可以使用 Aero Shake 晃动将所有打开的窗口快速最小化,只剩下您需要使用的窗口.然后,还可以轻松还原所有窗口.操作方法如下:1. 在需要保 ...
- Mac系统杂项 (持续更新)
一.调整LaunchPad的图标显示列数和行数 .调整每一列显示图标数量.在我的电脑上(1366 * 768),每列7个个人觉得比较不错 defaults write com.apple.dock s ...
- 在windows中使用VMWare安装Mac OS 10.7
请参考http://www.cnblogs.com/huwlnew/archive/2011/11/15/2250342.html http://unmi.cc/vmware9-install-mac ...
- Tomcat 改BUG之 localhost:8080 404
经过研究,发现造成该问题的原因可能是: 1.默认的80端口被占用: 2.服务-->apache tomcat未开启: 3.有资料称,是因为设备64位或32位,和软件不匹配: 4.(也有资料说是j ...
- CodeForces 222D - Olympiad
第一行给出两个个数字k和n,第二三行分别有k个数字,求将第二.三行之间的数字相互组合,求最多有多少个组合的和不小于n 纯粹暴力 #include <iostream> #include & ...
- Floyd算法(弗洛伊德算法)
算法描述: Floyd算法又称为弗洛伊德算法,插点法,是一种用于寻找给定的加权图中顶点间最短路径的算法.从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按 ...
- C++在数组元素个数未知情况下声明数组
我们都从书上学习的方法,定义一个数组需要数组名.类型以及数组元素个数,一般定义必须明确元素的个数,否则无法通过编译. 1. int a[]; 2. int n; int a[n]; 就想上面这两种情况 ...
- Zend Guard Loader和Zend Optimizer的安装(更新中)
本机上php是5.3.3的 下载安装程序 大概找对php.ini和apache的目录就对了 ,中途弹出提示框大概意思是安装过程中需要把apache关掉,不能用 下载地址:http://www.z ...
- apache配置gzip模式(转)
最近在看有关提高website性能的书,个人觉得挺不错的两本书: <<high performance websites>> <<even faster websi ...
- c语言 列出-终止系统进程
#include <stdio.h> #include "stdafx.h" #include <Windows.h> #include <strin ...