https://zybuluo.com/ysner/note/1099616

题面

给你三个数\(x\),\(y\),\(z\),问你能够凑出多少个[1,\(h\)]之间的数。

解析

处理出\(y\),\(z\)能凑出的高度
然后这些高度凑一些\(x\)就可以得到其它的高度
那么可以把这些\(y\),\(z\)凑出的高度对\(x\)取模,其它的用\(x\)来填补
所以设\(dp[i]\)表示\(y\),\(z\)凑出高度%\(x\)为\(i\)需要的最低高度
那么答案就是\[ans=\sum_{i=0}^{x-1}(\frac{h-dp[i]}{x}+1)\]

代码

#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<queue>
#define ll long long
#define re register
#define il inline
#define fp(i,a,b) for(re int i=a;i<=b;i++)
#define fq(i,a,b) for(re int i=a;i>=b;i--)
using namespace std;
const int N=5e5;
int h[N],cnt,X,Y,Z;ll dp[N];
bool vis[N];
ll ans,H;
struct Edge{int to,next,w;}e[N<<1];
struct node
{ll dis;int u;bool operator < (const node &o) const {return dis>o.dis;}
};
priority_queue<node>Q;
il void add(re int u,re int v,re int w){e[++cnt]=(Edge){v,h[u],w};h[u]=cnt;}
il ll gi()
{re ll x=0,t=1;re char ch=getchar();while((ch<'0'||ch>'9')&&ch!='-') ch=getchar();if(ch=='-') t=-1,ch=getchar();while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();return x*t;
}
il void Dijstra()
{memset(dp,127,sizeof(dp));dp[1%X]=1;Q.push((node){1,1%X});while(!Q.empty()){re int u=Q.top().u;Q.pop();if(vis[u]) continue;vis[u]=1;for(re int i=h[u];i+1;i=e[i].next){re int v=e[i].to;if(dp[v]>dp[u]+e[i].w){dp[v]=dp[u]+e[i].w;Q.push((node){dp[v],v});}}}
}
int main()
{memset(h,-1,sizeof(h));H=gi();X=gi();Y=gi();Z=gi();if(Y<X) swap(Y,X);if(Z<X) swap(Z,X);fp(i,0,X-1) add(i,(i+Y)%X,Y),add(i,(i+Z)%X,Z);Dijstra();fp(i,0,X-1) if(dp[i]<=H) ans+=((H-dp[i])/X+1);printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/yanshannan/p/8716953.html

Luogu3403跳楼机相关推荐

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

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

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

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

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

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

  4. 【JZOJ A组】跳楼机

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

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

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

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

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

  7. P3403 跳楼机 同余最短路

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

  8. 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 ...

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

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

  10. 【算法笔记】一步一步推出来的同余最短路优化思路(千字长文,超详细)

    整理的算法模板合集: ACM模板 目录 同余最短路 例题1:luogu P3403 跳楼机 例题2:luogu P2371 [国家集训队]墨墨的等式 例题3:luogu P2662 牛场围栏 同余最短 ...

最新文章

  1. win7下解决Android SDK Manger慢
  2. 视频目标检测跟踪--Detect to Track and Track to Detect
  3. 硕导跳槽高中当老师,博士扎堆中小学,是内卷还是进步?
  4. 修改注册表真正的提高网速
  5. Linux查看CPU,内存,GPU,进程,版本,系统内核信息
  6. 7 centos 源码安装samba_Centos-7安装zabbix
  7. java web 嵌套播放器_请教一下tableau如何嵌套进自己开发的javaweb 项目中,谢谢了...
  8. Transformer模型总结
  9. KNN算法的简单实现
  10. GO语言-基础语法:条件判断
  11. positional encoding位置编码详解:绝对位置与相对位置编码对比
  12. JavaScript函数作用域
  13. vue 跳转页面带对象_vue跳转页面的几种方法(推荐)
  14. dyld 加载 Mach-O
  15. Vue学习笔记之12-前端模块化
  16. 熊猫烧香系列变种分析报告
  17. 爱奇艺开源的高性能网络安全监控引擎
  18. 人口增长模型参数估计matlab,人口增长模型及实现(附MATLAB代码)
  19. 介绍一款在线仿站小工具
  20. 蓝瘦香菇!美国帅小伙作死尝试无人机剪头发

热门文章

  1. 孙鑫-MFC笔记七--文件与注册表
  2. block的理解 ios_iOS面试--字节跳动最新iOS开发面试题
  3. 【C++入门】C++ STL概述
  4. SparkStreaming读取本地文件进行wordCount
  5. Cmake构建_设置debug与release不同名字
  6. day23_内置函数(__del__ item系列 ,模块)
  7. 【PowerShell】逐行处理文本示例
  8. Spring Annotation是怎么工作的?
  9. DWR入门教程(http://www.cnblogs.com/cyjch/archive/2012/02/16/2353758.html)
  10. Linux 性能测试与分析-转