洛谷P1021 邮票面值设计
DP+DFS
复杂度 O(玄学)
一道奇怪的题目,考场不一定能想得出来
首先证明1的必要性,显然,没有1无法表示出1,因此1是必要的
有了1之后,就有了一个枚举范围,对于一种邮票,它的面值要比前一个大。
设前i-1种邮票能表示出来的最大范围为up,那么一定不能表示出up+1,所以第i种邮票的最大面值为up+1
复杂度未知,不过这种小数据的题只要想出解法通常就能过了
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;#define go(i,a,b) for(int i=a;i<=b;++i)
#define com(i,a,b) for(int i=a;i>=b;--i)
#define mem(a,b) memset(a,b,sizeof(a))const int inf=0x3f3f3f3f;int Max=0,ans[20],tmp[20],f[100000+10],m,tot;int calc(int n,int up){up*=tot;go(i,1,up) f[i]=inf;go(i,1,n)go(j,tmp[i],up){if(f[j-tmp[i]]+1<=tot)f[j]=min(f[j-tmp[i]]+1,f[j]);}go(i,1,up){if(f[i]==inf) return i-1;}return up;
}void dfs(int now,int last,int up){if(now==m+1){if(up>Max){Max=up;go(i,1,m) ans[i]=tmp[i];}return;}int x;go(i,last+1,up+1){tmp[now]=i;if((x=calc(now,i))>up)dfs(now+1,i,x);}
}int main(){//freopen("input.txt","r",stdin);cin>>tot>>m;dfs(1,0,0);go(i,1,m) cout<<ans[i]<<' ';puts("");cout<<"MAX="<<Max;return 0;
}
转载于:https://www.cnblogs.com/White-star/p/11493918.html
洛谷P1021 邮票面值设计相关推荐
- 洛谷P1021邮票面值设计
题目 一道很经典的搜索题,可以锻炼搜索的能力,比如可以用dfs覆盖加dp的方式来寻找+更新答案.而且还可以通过在递归中增加数组的方式来辅助搜索. #include <bits/stdc++.h& ...
- P1021 邮票面值设计
P1021 邮票面值设计 题目描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1-MAX ...
- 算法提高 邮票面值设计
算法提高 邮票面值设计 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤13)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮 ...
- 算法提高 邮票面值设计 搜索 动态规划
算法提高 邮票面值设计 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤13)种邮票的情况下(假定所有的邮票数量都足够),如何设 ...
- 2021.06.03邮票面值设计
2021.06.03邮票面值设计 题目描述 给定一个信封,最多只允许粘贴 N 张邮票,计算在给定 K(N+K≤15)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值 MAX ...
- codevs 1047邮票面值设计
codevs 1047邮票面值设计 刚看这题的时候就感觉是搜索,但是分类又是动态规划,就往动态规划那里想,结果就以为是那种一个递推式就出来的一个动态规划,后来写代码交上去发现都是错了,才感觉这里面肯定 ...
- java 算法提高 邮票面值设计 蓝桥杯1046
java 算法提高 邮票面值设计 蓝桥杯1046 算法提高 邮票面值设计 思路 代码 算法提高 邮票面值设计 Description 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤13) ...
- 洛谷 P2725 邮票题解
题目背景 给一组 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K -- 表示信封上能够贴 K 张邮票.计算从 1 到 M 的最大连续可贴出的邮资. 题目描述 例如,假设有 1 分和 3 ...
- 邮票面值设计java,[蓝桥杯][算法提高VIP]邮票面值设计 (C++代码)
解题思路: 注意事项: 参考代码://so easy #include #include//头文件 using namespace std; int a[17],n,k,ans[17],maxn;// ...
最新文章
- debian linux 版本代号
- bootstrap下拉列表与输入框组结合的样式调整
- 虚拟机和linux的安装
- 成为Java流专家–第2部分:中级操作
- python-循环-通过while循环完成一个电子钟的模拟
- Android应用程序启动过程源代码分析(5)
- python中复制n次字符串_Python正则表达式,如何将字符串匹配n次 - python
- 2007年4月 [Update to 4.27]
- mongodb系列~mongodb的副本集搭建和原理
- iOS底层探索之类的结构—cache分析(上)
- 华为管理学案例分析_华为案例分析——管理学作业.ppt
- windows设置CPU主频
- Linux中的lvm动态扩容管理
- 星际穿越+降临+明日边缘?星际拓荒重新定义星际探索题材游戏
- Photoshop-颜色的调整
- 图像成像原理与相机标定
- 初学Python可能会遇见的小程序
- python基础(一)完结
- 基于stm32+LM2904+esp8266的噪声预警系统
- 开关霍尔简易估算电角度