赫连如冰 发表于 2025-6-4 09:51:59

P3957 [NOIP2017 普及组] 跳房子

思路:

首先发现单调性,灵活性增加 \(x+1\) 的答案肯定不会比增加 \(x\) 的答案更劣。
那么可以二分求 \(g\),则机器人每次可以移动 \([\max(d-mid,1),d+mid]\) 这个区间内的距离,为了方便,设为 \(\)。
考虑动态规划求得能走到的最大分数,令 \(dp_i\) 表示走到第 \(i\) 个格子的最大分数,则状态转移方程为:

\ dp_j\]
可以使用单调队列维护:

[*]若当前队尾为 \(j\),且 \(x_j < x_i - r\),则这个 \(j\) 无法对 \(dp_i\) 造成贡献,直接不断弹出即可。
[*]若当前队头为 \(j\),且 \(x_{j+1} \le x_i - l\),则这个 \(j+1\) 可以对 \(dp_i\) 造成贡献,不断插入即可。
[*]因为要维护最大值,可以使用单调队列。
时间复杂度为 \(O(N \log W)\)。
完整代码:

#include#define Add(x,y) (x+y>=mod)?(x+y-mod):(x+y)#define lowbit(x) x&(-x)#define pi pair#define pii pair#define iip pair#define ppii pair#define fi first#define se second#define full(l,r,x) for(auto it=l;it!=r;it++) (*it)=x#define Full(a) memset(a,0,sizeof(a))#define open(s1,s2) freopen(s1,"r",stdin),freopen(s2,"w",stdout);using namespace std;typedef double db;typedef unsigned long long ull;typedef long long ll;bool Begin;const ll N=5e5+10;inline ll read(){    ll x=0,f=1;    char c=getchar();    while(c'9'){      if(c=='-')          f=-1;      c=getchar();    }    while(c>='0'&&c

魄柜 发表于 2025-10-24 07:23:54

东西不错很实用谢谢分享

王妍芳 发表于 2025-10-24 13:27:31

用心讨论,共获提升!

翁谌缜 发表于 2025-10-27 05:39:22

热心回复!

廖彗云 发表于 2025-11-1 17:11:48

前排留名,哈哈哈

揭荸 发表于 2025-12-9 19:31:46

感谢,下载保存了

驼娑 发表于 2025-12-24 14:30:14

用心讨论,共获提升!

郗燕岚 发表于 2025-12-30 09:30:03

这个好,看起来很实用

撙仿 发表于 2025-12-30 18:10:28

分享、互助 让互联网精神温暖你我

祖柔惠 发表于 2026-1-7 13:06:55

这个好,看起来很实用

后仲舒 发表于 2026-1-12 05:53:42

前排留名,哈哈哈

钱艷芳 发表于 2026-1-19 22:34:35

喜欢鼓捣这些软件,现在用得少,谢谢分享!

郜庄静 发表于 2026-1-21 06:34:33

收藏一下   不知道什么时候能用到

届表 发表于 2026-1-22 02:57:36

鼓励转贴优秀软件安全工具和文档!

捡嫌 发表于 2026-1-23 02:34:32

热心回复!

老僻贞 发表于 2026-1-27 04:52:28

谢谢楼主提供!

琉艺戕 发表于 2026-1-27 06:36:53

yyds。多谢分享

佟棠华 发表于 2026-1-28 04:41:13

喜欢鼓捣这些软件,现在用得少,谢谢分享!

辈霖利 发表于 2026-1-28 06:04:46

yyds。多谢分享

捡嫌 发表于 2026-1-29 06:39:30

谢谢分享,试用一下
页: [1] 2
查看完整版本: P3957 [NOIP2017 普及组] 跳房子