P1021 邮票面值设计(dfs+背包dp)
P1021 邮票面值设计
题意:
给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15N+K≤15)种邮票的情况下
(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,
使在1至MAX之间的每一个邮资值都能得到。
思路:
dfs+背包dp
暴搜k种邮票,下一种邮票的取值就是上一张邮票值+1,到上一次选的最大值+1;
比如这上一次你选了1,n=3时,下一次你能选的就是2,3,4;
然后怎么确定当前选择i之后的最大值呢,就是用到背包dp,dp[i]表示凑
到i时所用的最少邮票数。
代码:
#include<bits/stdc++.h>
using namespace std;
#define N 105
int n,k;
int res;
int ans[N],tmp[N],dp[]; int get(int cur,int sum)
{
memset(dp,0x3f3f3f3f,sizeof(dp));
dp[]=;
for(int i=;i<=cur;i++)
{
for(int j=tmp[i];j<=n*sum;j++)
dp[j]=min(dp[j],dp[j-tmp[i]]+);;
}
for(int i=;i<=n*sum;i++)
if(dp[i]>n) return i-;
return n*sum;
}
void dfs(int cur,int L1,int L2,int sum)
{
if(cur>k)
{
if(res<L2)
{
res=L2;
for(int i=;i<=n;i++)
ans[i]=tmp[i];
}
return ;
}
for(int i=L1+;i<=L2+;i++)
{
tmp[cur]=i;
int x=get(cur,sum+i);
dfs(cur+,i,x,sum+i);
}
}
int main()
{
while(~scanf("%d %d",&n,&k))
{
res=;
dfs(,,,);
for(int i=;i<=k;i++)
printf("%d ",ans[i]);
printf("\nMAX=");
printf("%d\n",res);
}
return ;
}
P1021 邮票面值设计(dfs+背包dp)的更多相关文章
- P1021 邮票面值设计——搜索+完全背包
P1021 邮票面值设计 题目意思是你最多用n张邮票,你可以自己设定k种邮票的面值,每种邮票数量无穷,你最多能用这k种邮票在不超过n张的情况下,组合成的价值要求是从1开始连续的, 求最大能连续到多少: ...
- P1021 邮票面值设计
P1021 邮票面值设计 题目描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1-MAX ...
- [NOIP1999提高] CODEVS 1047 邮票面值设计(dfs+dp)
dfs出邮票的各种面值,然后dp求解. ------------------------------------------------------------------------------- ...
- 洛谷P1021邮票面值设计 [noip1999] dp+搜索
正解:dfs+dp 解题报告: 传送门! 第一眼以为小凯的疑惑 ummm说实话没看标签我还真没想到正解:D 本来以为这么多年前的noip应该不会很难:D 看来还是太菜了鸭QAQ 然后听说题解都可以被6 ...
- 洛谷P1021 邮票面值设计
题目描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1-MAX之间的每一个邮资值都能得到 ...
- 【NOIP1999】邮票面值设计 dfs+dp
题目传送门 这道题其实就是找一波上界比较麻烦 用一波 背包可以推出上界mx 所以新加入的物品价值一旦大于mx+1,显然就会出现断层,所以可以以maxm+1为枚举上界,然后这样进行下一层的dfs. 这样 ...
- 洛谷 P1021 邮票面值设计
题目描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1-MAX之间的每一个邮资值都能得到 ...
- 洛谷——P1021 邮票面值设计
https://www.luogu.org/problem/show?pid=1021 题目描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15)种邮票的情况下(假定所有的邮票数量都 ...
- 洛谷P1021邮票面值设计
题目 一道很经典的搜索题,可以锻炼搜索的能力,比如可以用dfs覆盖加dp的方式来寻找+更新答案.而且还可以通过在递归中增加数组的方式来辅助搜索. #include <bits/stdc++.h& ...
随机推荐
- [Tyvj1423]GF和猫咪的玩具(最短路)
[Tyvj1423]GF和猫咪的玩具 题目描述 GF同学和猫咪得到了一个特别的玩具,这个玩具由n个金属环(编号为1---n),和m条绳索组成,每条绳索连接两个不同的金属环,并且长度相同.GF左手拿起金 ...
- oracle 汇编04
General-Purpose Instructions The general-purpose instructions perform basic data movement, memory ad ...
- python-使用list和tuple
list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: >>> ...
- SQL 1 数据库 表的操作
数据库:是按照数据结构来组织.存储和管理数据的建立在计算机存储设备上的仓库.一句话就是存储数据的仓库 数据库的分类:网络数据库.层级数据库.关系结构数据库. 倘若按照数据库的存储介质来分:关系型数据库 ...
- sysbench github & manual
sysbench github https://github.com/akopytov/sysbench sysbench-manual.pdf https://github.com/mrivandu ...
- 2018-08-01-weekly
Algorithm 4. Median of Two Sorted Arrays What 两个排序数组的中位数 How 两个数组合并到同一个数组,然后进行排序取中间值即可 Key Codes cla ...
- shell 操作mysql
1.连接 #!/bin/bash user="root" password="XXXXXX" sql = `mysql -u>/dev/null use ...
- springboot+thymeleaf 访问静态资源解决(static)
---------------------------------------2.1.3-------------------------------------------------------- ...
- linux运维、架构之路-linux定时任务
1.基础优化之开机启动服务优化 使用awk拼接的方式 [root@cache01 ~]# chkconfig |egrep -v "crond|network|sshd|rsyslog|sy ...
- kafka集群安装及基本命令行使用
集群安装 环境介绍 本次安装kafka集群利用的是自带的zooKeeper,其实最好是把kafka和zooKeeper部署在不同的节点上,这样更高可用. 三个节点: kafka1:192.168.56 ...