跳楼机

题目链接:luogu P3403

题目大意

问你 1~h 中有多少个数可以表示成 ax+by+cz 的形式。
其中 x,y,z 是给出的三个正整数,a,b,c 是你可以选择的非负数。
h≤2^63-1,x,y,z≤10^5

思路

首先列出 O(h)O(h)O(h) 的 DP 式子,但是显然不行,于是考虑优化。
有关 hhh 的复杂度算法似乎没有什么进展,所以考虑另外三个范围小的数。

不妨思考如果只有两个数会怎样?
不难发现如果你确定了当前的数字,然后你只用一个数,那就是可以加上它的任意非负数倍数。
那如果你能凑出 aaa,你就不需要考虑 a+x,a+2x,a+3x,...a+x,a+2x,a+3x,...a+x,a+2x,a+3x,... 这些数是否需要凑出了。

那某种意义上我们只需要考虑 min⁡(x,y,z)\min(x,y,z)min(x,y,z) 个数!
那假设我们用 xxx(因为三个都是同一个级别的),那我们只需要对于模 xxx 等于 0∼x−10\sim x-10∼x−1 的每个情况,我们求出这这些数中,你能求出的最小的数。
(也就是你能求出的是一段后缀,你要找到这段后缀开始的地方)

那怎么找呢?那我们只需要考虑用另外的两个数 y,zy,zy,z 来凑。因为这个时候凑 xxx 没有用了。
那我们可以从 aaa 凑到 (a+y)%x,(a+z)%x(a+y)\%x,(a+z)\%x(a+y)%x,(a+z)%x,那就是一个 f(a+y)%x=min⁡(f(a+y)%x,fa+y),f(a+z)%x=min⁡(f(a+z)%x,fa+z)f_{(a+y)\%x}=\min(f_{(a+y)\%x},f_a+y),f_{(a+z)\%x}=\min(f_{(a+z)\%x},f_a+z)f(a+y)%x​=min(f(a+y)%x​,fa​+y),f(a+z)%x​=min(f(a+z)%x​,fa​+z)
那这个显然可能有环,但是由于是 min⁡\minmin 我们其实会发现它其实可以看做一个最短路!

然后跑最短路就能求出 fff,对于每个位置你计算一下后缀的长度,就是总共的答案了。

代码

#include<queue>
#include<cstdio>
#include<cstring>
#define ll long longusing namespace std;const int N = 1e5 + 100;
ll h, f[N];
int x, y, z;
priority_queue <pair<ll, int>, vector<pair<ll, int> >, greater<pair<ll, int> > > q;
bool in[N];int main() {scanf("%lld", &h);scanf("%d %d %d", &x, &y, &z);memset(f, 0x7f, sizeof(f)); f[0] = 1; q.push(make_pair(f[0], 0));while (!q.empty()) {int now = q.top().second; q.pop();if (in[now]) continue; in[now] = 1;int to = (now + y) % x;if (f[to] > f[now] + y) {f[to] = f[now] + y; q.push(make_pair(f[to], to));}to = (now + z) % x;if (f[to] > f[now] + z) {f[to] = f[now] + z; q.push(make_pair(f[to], to));}}ll ans = 0;for (int i = 0; i < x; i++) {if (f[i] > h) continue;ans += (h - f[i]) / x + 1;}printf("%lld", ans);return 0;
}

【luogu P3403】跳楼机(图论)相关推荐

  1. 同余最短路(P3403 跳楼机)

    同余最短路 前置 给定m个数,这m个数可以重复取,问最大的这m个数不能拼成的数,或者给定一定范围,范围里有多少个数是这m个数可以拼成的,对于这种问题我们可以考虑同余最短路的算法. P3403 跳楼机 ...

  2. P3403 跳楼机 同余最短路

    传送门 题意: 思路: 转换一下题目就是用若干x,y,zx,y,zx,y,z能凑出来多少个<=h<=h<=h的数.先考虑两个数y,zy,zy,z的情况,我们如果能求出来这两个数能凑出 ...

  3. 【洛谷 P3403】跳楼机(SPFA)

    P3403 跳楼机 题目背景 DJL为了避免成为一只咸鱼,来找srwudi学习压代码的技巧. 题目描述 Srwudi的家是一幢h层的摩天大楼.由于前来学习的蒟蒻越来越多,srwudi改造了一个跳楼机, ...

  4. 【洛谷3043】跳楼机(最短路)

    [洛谷3043]跳楼机(最短路) 题面 洛谷 题解 思路很妙嗷. 先只考虑只用\(y,z\)两种移动方式,它们一定能够到达一些楼层, 那么这些楼层再只用\(x\)拓展就能够计算答案. 那么我们这样子计 ...

  5. 【JZOJ A组】跳楼机

    Description DJL为了避免成为一只咸鱼,来找srwudi学习压代码的技巧. Srwudi的家是一幢h层的摩天大楼.由于前来学习的蒟蒻越来越多,srwudi改造了一个跳楼机,使得访客可以更方 ...

  6. 机器人无限火力无限e符文_无限火力装备符文评级 召唤师峡谷秒变欢乐谷 机器人化身跳楼机...

    无限火力模式激情上线,拥有80%超快冷却缩减的BUFF,一切都和召唤师峡谷不同.那么在无限火力模式中,哪些装备符文能拥有更为亮眼的表现呢? 装备篇 无限火力最爽的一点就是--装备也能够享受80%的冷却 ...

  7. 最短路模型-跳楼机-洛谷P3403

    第一次遇到这种数学题转化为图论的题目,与我一开始的想法相同,将其中一个变量与另外两个变量分离开来,便于处理.由于以前一直认为SPFA会被卡,所以使用了堆优化的Dijkstra,结果超时了,为什么呢?因 ...

  8. JZOJ #4722 跳楼机 (最短路模型的完美转化)

    题目描述: 给出$h,x,y,z$,求在$h$以内,$x,y,z$可以凑出多少个不同的数.$(1\leq{h}\leq{10^{18}},1\leq{x,y,z}\leq{10^5})$ 解题思路: ...

  9. JZOJ4722 跳楼机 巧妙地转换为最短路模型

    题目大意 有一个 H H高的楼房,现在给你三个正整数x,y,zx,y,z表示,在每一层 i i,你有4种选择,到i+xi+x, i+y i+y, i+z i+z层或第 1 1层.问能到多少个楼层. H ...

  10. ZJOI2019一轮停课刷题记录

    Preface 菜鸡HL终于狗来了他的省选停课,这次的时间很长,暂定停到一试结束,不过有机会二试的话还是可以搞到4月了 这段时间的学习就变得量大而且杂了,一般以刷薄弱的知识点和补一些新的奇怪技巧为主. ...

最新文章

  1. 安防行业为何缺少真正适用的AI芯片?
  2. Java Activiti 工作流引擎 流程审批 后台框架源码 springmvc SSM
  3. 《嵌入式linux应用程序开发标准教程》笔记——7.进程控制开发
  4. Android小項目之---ListView实现论坛管理效果(附源碼)
  5. eclipse xhtml文件 标签自动提示 问题解决
  6. Java 如何设置时间_如何在Java中设置尊重用户操作系统设置的日期和时间格式
  7. java堆栈_Java堆栈– Java堆栈
  8. 关于逻辑或的一个小小应用注意点
  9. 面试官:谈谈分布式一致性机制,我一脸懵逼。。
  10. 工程数学线性代数第六版答案与解析,《线性代数附册学习辅导与习题全解》
  11. 奥鹏教育计算机应用基础试题及答案,奥鹏计算机应用基础试题及答案.pdf
  12. 关于PDF文件加密无法打印的问题
  13. 弹球小游戏c语言编程,scratch丨(1) 弹球小游戏
  14. Vue 在使用v-if的前提下,使用elementResizeDetector配合ref获取元素块的高度
  15. 学习python需要很多数学知识吗_Python数据分析需要学习哪方面的数学知识
  16. 李小龙传奇一生的资料(多图)
  17. 蓝桥杯 ADV-201 VIP试题 我们的征途是星辰大海(试题解析)
  18. mysql normsinv_软件教程热搜榜_最新软件教程热门新闻_软件教程资讯大全-PC下载网资讯网...
  19. java程序将多张图片合成一张
  20. 机器学习入门级实例——针对葡萄酒质量进行建模

热门文章

  1. 三天两夜,1M图片优化到100kb/肝都熬爆了
  2. 大型连锁百货运维审计用什么软件好?有哪些功能?
  3. 你印象中的程序员是什么样子的?
  4. 一个80后神话的倒掉----郑立
  5. 自制hdmi线一头改vga图_破拆电脑VGA电缆以制作收音机天线零件:双目铁氧体磁芯...
  6. 毕加索传记的艺术和历史
  7. 有10亿个整数,要求选取重复次数最多的100个整数
  8. 无线网络经常掉线的12种情况
  9. ASPF与NAT ALG的工作原理与应用
  10. 持久化内存挑战PERSISTENT MEMORY CHALLENGES