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& ...
随机推荐
- Bootstrap框架如何设置导入链接
bootstrap文件划分: 导入规则: 方式一:可以先下载 ----https://v3.bootcss.com/ (1) 注意事项: (2) (3) 注意1:bootstrap中的js文件依赖于j ...
- R语言data.table包fread读取数据
R语言处理大规模数据速度不算快,通过安装其他包比如data.table可以提升读取处理速度. 案例,分别用read.csv和data.table包的fread函数读取一个1.67万行.230列的表格数 ...
- 06.Linux-RedHat系统本地yum源配置
RedHat系统 1.挂载镜像光盘[root@localhost ~]# mount /dev/sr0 /media/cdrom/ 2.创建本地yum源仓库[root@localhost ~]# cd ...
- 用python 写一个nagios插件 监控http内容(转载)
nagios自带的http-check插件主要是检测地址url是否可以访问,在web+中间件的架构中容易出现url能访问,但是后台中间件拓机的情况,因为最近在自学python,所以写了个脚本检测ur ...
- 搭建vue项目并启动vue项目
链接地址:https://blog.csdn.net/aa792978017/article/details/82939483 Vue.js是现在比较优秀的Web前端框架,下面开始从零开始搭建一个Vu ...
- namedtuple的简单使用
""" factory function for creating tuple subclasses with named fields namedtuple 是tupl ...
- python学习笔记(十三)处理时间模块
import time time.sleep(2)#等待几秒 时间的三种表现方式: 1.格式化好的时间 2018-1-14 16:12 2.时间戳 是从unix元年到现在所有的秒数 3.时间元组 想时 ...
- 牛客:t次询问,每次给你一个数n,求在[1,n]内约数个数最多的数的约数个数(数论+贪心)
https://ac.nowcoder.com/acm/contest/907/B t次询问,每次给你一个数n,求在[1,n]内约数个数最多的数的约数个数 分析: 根据约数和定理:对于一个大于1正整数 ...
- Your first HTML form
The first article in our series provides your very first experience of creating an HTML form, includ ...
- 洛谷P1288 取数游戏II(博弈)
洛谷P1288 取数游戏II 先手必胜的条件需要满足如下中至少 \(1\) 条: 从初始位置向左走到第一个 \(0\) 的位置,经过边的数目为偶数(包含 \(0\) 这条边). 从初始位置向右走到第一 ...