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& ...
随机推荐
- PREPARE - 创建一个准备好的查询
SYNOPSIS PREPARE plan_name [ (datatype [, ...] ) ] AS statement DESCRIPTION 描述 PREPARE 创建一个已准备好的查询. ...
- 三、Windows下用FFmpeg+nginx+rtmp搭建直播环境 实现推流、拉流
一.环境 1.开发环境:windows 2.开发工具:FFmpeg.nginx.nginx-rmtp-module (链接:https://pan.baidu.com/s/119d2GeMzddas_ ...
- Ansible笔记(7)---常用模块之系统类模块(cron、service)
一.cron模块 1.1作用: cron 模块可以帮助我们管理远程主机中的计划任务,功能相当于 crontab 命令. 在了解cron模块的参数之前,先写出一些计划任务的示例: # 示例1,每天的1点 ...
- a[b]和b[a]区别
#include <stdio.h> main() { char a[5] = "abcd"; int b = 3; printf("%c\n",a ...
- Pycharn破解补丁激活
Pycharn破解补丁激活 到期时间: 1. 下载 https://pan.baidu.com/s/1mcQM8CLUnweY02ahKEr4PQ 并将 JetbrainsCrack-release ...
- 用树状数组写的最长上升子序列(友好城市),nlogn。
#include<iostream> #include<algorithm> #define maxn 100000 #define lb(x) x&-x using ...
- locate 定位配置文件
[root@VM_58_118_centos syhuo.net]# locate redis.conf /etc/redis.conf /etc/redis.conf_bak_20191008 /u ...
- 20180716-Java正则表达式
import java.util.regex.Matcher;import java.util.regex.Pattern; public class RegexMatches{ public sta ...
- Unity 中使用预编译指令区分平台
在实际项目开发过程中,我们经常会根据平台来写一些逻辑 #if UNITY_EDITOR #elif UNITY_IPHONE #elif UNITY_ANDROID #endif 使用预编译指令能很好 ...
- (转)k8s集群部署二:flannel网络
转:https://blog.csdn.net/sinat_35930259/article/details/79946146 Overlay Network模式 覆盖网络,在基础网络上叠加的一种虚拟 ...