洛谷 P9100 [PA 2020] Miny 题解

这道题难点在于状态设计。考虑线性 DP,设d p i dp_idpi为仅考虑前i ii个地雷且钦定第i ii个不引爆的方案数。这样设计的好处在于i ii前面的地雷一定不会引爆i ii后面的,从而满足无后效性。

注意需要在左右无穷远处各添加一个爆炸半径无穷大的哨兵地雷,下标分别为0 00n + 1 n+1n+1,确保哨兵能引爆所有地雷。答案即为d p n + 1 dp_{n+1}dpn+1

然后考虑转移。对于每个i ii,枚举所有j < i j<ij<i,然后判断引爆[ j + 1 , i − 1 ] [j+1,i-1][j+1,i1]中所有地雷是否会引爆i iij jj。若均不会则能转移,令d p i ← d p i + d p j dp_i\leftarrow dp_i+dp_jdpidpi+dpj

尝试转化这个条件。设l i l_ilii ii左边第一个会引爆i ii的地雷,r i r_iri同理。则上述条件等价于j ≥ l i j\ge l_ijlii ≤ r j i\le r_jirj

l , r l,rl,r两个数组都可以单调栈上二分处理。

然后状态转移方程如下。
d p i = ∑ j = l i i − 1 [ i ≤ r j ] ⋅ d p j = ∑ j = 0 i − 1 [ i ≤ r j ] ⋅ d p j − ∑ j = 0 l i − 1 [ i ≤ r j ] ⋅ d p j \begin{aligned} dp_i&=\sum_{j=l_i}^{i-1}[i\le r_j]\cdot dp_j\\ &=\sum_{j=0}^{i-1}[i\le r_j]\cdot dp_j-\sum_{j=0}^{l_i-1}[i\le r_j]\cdot dp_j\\ \end{aligned}dpi=j=lii1[irj]dpj=j=0i1[irj]dpjj=0li1[irj]dpj

先离线,把d p i dp_idpi的两个询问分别挂在i − 1 i-1i1l i − 1 l_i-1li1上,然后树状数组扫一遍即可。需要特殊处理j = 0 j=0j=0的情况。

时间复杂度O ( n log ⁡ n ) O(n\log n)O(nlogn)

#include<bits/stdc++.h>#definerept(i,a,b)for(inti(a);i<=b;++i)#definepert(i,a,b)for(inti(a);i>=b;--i)#definelowbit(x)((x)&-(x))#defineebemplace_back#defineintlonglongusingnamespacestd;constexprintN=3e5+5,P=1e9+7,INF=3e18;structitem{intp,rad,lb,rb;}a[N];structquery{query()=default;query(int_id,int_k):id(_id),k(_k){}intid,k;};intdp[N],st[N],l[N],r[N],s[N],n,top;vector<query>q[N];voidadd(intp,intx){while(p<=n+1)s[p]+=x,p+=lowbit(p);}intask(intp){intres=0;while(p)res+=s[p],p^=lowbit(p);returnres;}signedmain(){cin.tie(0)->sync_with_stdio(0);cin>>n;a[0]={-INF,INF,-INF,INF};a[n+1]={INF,INF,-INF,INF};r[0]=r[n+1]=n+1;dp[0]=1;rept(i,1,n){cin>>a[i].p>>a[i].rad;a[i].lb=a[i].p-a[i].rad;a[i].rb=a[i].p+a[i].rad;}st[top=1]=0;rept(i,1,n){intL=1,R=top,mid;while(L<R){mid=L+R+1>>1;a[st[mid]].rb>=a[i].p?L=mid:R=mid-1;}l[i]=st[L];while(a[st[top]].rb<a[i].rb)--top;st[++top]=i;}st[top=1]=n+1;pert(i,n,1){intL=1,R=top,mid;while(L<R){mid=L+R+1>>1;a[st[mid]].lb<=a[i].p?L=mid:R=mid-1;}r[i]=st[L];while(a[st[top]].lb>a[i].lb)--top;st[++top]=i;}rept(i,1,n+1){if(!l[i])++l[i],++dp[i];// 特判从dp[0]转移if(l[i]>1)q[l[i]-1].eb(i,-1);if(i>1)q[i-1].eb(i,1);}rept(i,1,n+1){add(r[i],dp[i]);for(auto[id,k]:q[i]){(dp[id]+=k*(ask(n+1)-ask(id-1)))%=P;}}cout<<(dp[n+1]+P)%P;return0;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1221321.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java应用实例:简易背单词程序(更新)

一、预期实现功能 V1.0&#xff1a; 准备数据&#xff1a; 找到 单词与翻译的对照数据 存入到文件中 在程序中读取文件中的数据V2.0: 1: 随机抽取单词&#xff0c;去掉其中某个字母&#xff0c;要求用户输入这个字母填空 2&#xff1a;给出中文翻译&#xff0c;输入单词 实现拼…

初识线程:带你理解程序运行的基本流程

一、基本概念开发程序是为了解决问题1.程序一个存在磁盘中的程序&#xff08;一份文件 代码文件数据文件&#xff09;不能解决问题2.进程正在运行中的程序 代码和数据 都在内存中可以解决问题&#xff1a;通过&#xff08;代码-计算机指令&#xff09;调度计算机资源&#xf…

后端开发效率翻倍:IntelliJ IDEA的5个“神级插件

一、GitToolBox&#xff1a;Git协作效率加速器功能概述&#xff1a;增强IDEA原生Git功能&#xff0c;将版本控制操作无缝集成到IDE中&#xff0c;避免频繁切换命令行。 核心作用&#xff1a;实时Blame信息&#xff1a;点击代码行右侧显示最近修改者、提交时间和摘要&#xff0c…

Zookeeper在大数据实时报表系统中的应用

Zookeeper在大数据实时报表系统中的应用 关键词&#xff1a;Zookeeper、大数据、实时报表系统、分布式协调、一致性协议、分布式锁、元数据管理 摘要&#xff1a;本文深入探讨Zookeeper在大数据实时报表系统中的核心应用场景&#xff0c;包括分布式协调、配置管理、集群节点管理…

063.经典搜索,剪枝

include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=25; int n; vectorwords; int cnt[N]; char st; int ans=0; void dfs(string cur){ ans=max(ans,(int)cur.size()); for(int i…

从零开始学大模型核心:向量嵌入技术完全指南

文章全面介绍了向量嵌入技术在大模型中的应用&#xff0c;包括词嵌入、文档嵌入、多模态嵌入等多种类型&#xff0c;以及向量索引、存储优化和相似度计算等关键技术。文章详细阐述了嵌入与向量数据库的协同关系&#xff0c;以及在大规模语义搜索、推荐系统、异常检测和RAG等场景…

CF2029G Balanced Problem

题目大意: 有一个长度为 \(n\) 的数组 \(a\) 和一个长度为 \(n\) 的数组 \(c_{i}\),初始全都为 \(0\),有两种操作,一种是前缀加 \(1\),一种是后缀加 \(1\)。 已经进行了 \(m\) 次操作(已给定),现在对于每个 \(…

【技术干货】大模型记忆机制进化全攻略:从存储到经验的AI认知革命

本文解析了LLM智能体记忆机制的三阶段进化&#xff1a;从基础存储到反思提炼&#xff0c;再到经验抽象。这一进化解决了AI在多步骤任务中的逻辑断裂、无法持续学习等痛点&#xff0c;通过主动探索和跨轨迹抽象等技术突破&#xff0c;使AI从"单次响应工具"升级为"…

1.5万字硬核AI架构指南:从单体智能到系统智能的实战设计

正文开始&#xff1a; 回顾这两年的 AI 发展轨迹&#xff0c;你会发现两条截然不同却又并行不悖的主线&#xff1a; 一条是造脑路线&#xff1a;基础模型层&#xff08;Foundation Models&#xff09;的狂奔&#xff0c;各大厂商拼参数、拼算力&#xff0c;目标是通用人工智能…

双非二程序员的大模型逆袭之路:RAG与Agent技术学习指南

本文探讨双非二本科生在大模型应用开发领域的就业前景&#xff0c;指出尽管学历存在挑战&#xff0c;但行业对RAG和Agent技术人才需求旺盛&#xff0c;更看重实际技术能力而非学历。文章分析了企业招聘要求、薪资前景&#xff0c;并提供了系统学习路径&#xff0c;包括Python编…

大模型应用工程师学习路线:从提示词工程到AI系统构建,年薪50w+技能全攻略_这是一份大模型应用学习路线!(附学习资料)

本文详细介绍了大模型应用工程师的完整学习路线&#xff0c;涵盖提示词工程、检索增强生成(RAG)、模型微调、系统部署及AI项目实践五大核心技术。随着大模型与各行业深度融合&#xff0c;应用工程师年薪可达50w。学习路线从基础到进阶&#xff0c;强调实践落地&#xff0c;帮助…

AARONIA(安诺尼)PBS 1 与 PBS 2 近场探头 —— 精准定位电磁干扰源

AARONIA(安诺尼)PBS 1 与 PBS 2 近场探头 —— 精准定位电磁干扰源的专业工具 在电磁兼容(EMC)预测试、电路调试及故障诊断中,快速锁定近场辐射源是提升产品可靠性的关键一步。AARONIA(安诺尼)推出的 PBS 1 与 …

20260126 之所思 - 人生如梦

20260126 之所思做的好的事:1. 天气寒冷干燥,脖子后面长了两颗痘痘,可能是在发育期,扭动脖子就会很疼,要是放在以前肯定是手痒将其挤掉,然后引发炎症,一发不可收拾。以往身体的疼痛与不适还会引起心情烦躁,干事…

mysql day2

sql 语句简单介绍sql语句执行顺序 FROM/JOIN → WHERE → GROUP BY → HAVING → 窗口函数(OVER) → SELECT → DISTINCT → ORDER BY → LIMIT . . . 简单的用法 1. 数据库操作创建数据库 create database db1; 使用…

YOLOv8改进 - 注意力机制 | SENetV2: 用于通道和全局表示的聚合稠密层,结合SE模块和密集层来增强特征表示

前言 本文介绍了将SENetV2与YOLOv8结合的方法&#xff0c;以提升图像分类性能。SENetV2是结合Squeeze-and-Excitation&#xff08;SE&#xff09;模块和密集层的图像分类模型&#xff0c;引入聚合稠密层用于通道和全局表示。其SE模块重新校准通道特征&#xff0c;密集层优化特…

21点,如何计算胜率高达75%

算法原理低牌&#xff08;2-6&#xff09;&#xff1a;1分低牌&#xff08;2-6&#xff09;在21点中通常对玩家有利&#xff0c;因为它们更可能帮助玩家接近21点&#xff08;如16218&#xff0c;16319等&#xff09;&#xff0c;而不会轻易导致爆牌。因此&#xff0c;当低牌被打…

干瞪眼游戏胜率较高的玩法分析

### **干瞪眼游戏胜率较高的玩法分析**在干瞪眼游戏中&#xff0c;玩家需要通过合理出牌、灵活运用牌型和策略性保留关键牌来提高胜率。以下是胜率较高的玩法策略&#xff1a;---#### **1. ** **炸弹的灵活运用** - **核心作用**&#xff1a;炸弹&#xff08;四张相同牌&#x…

中国船级社信息开发咨询中心 APP开发工程师职位深度解析与技术面试指南

中国船级社信息开发咨询中心 APP开发工程师 职位信息 岗位职责: 1、掌握所参与工作涉及的船检业务以及办公业务; 2、移动应用以及微信小程序的需求调研、分析、文档编制工作; 3、移动应用以及微信小程序的编码开发及单元测试工作; 4、移动应用以及微信小程序使用培训、技术…

北航杭州创新研究院移动客户端/前端开发工程师岗位深度解析与面试指南

北京航空航天大学杭州创新研究院 移动客户端/前端开发工程师 职位信息 有意向人员请前往北航杭研院人才招聘网(杭研院官网→招才引智→人才招聘网)注册,登陆填写信息后投递,每人限报1个岗位。 岗位描述: 1.负责移动端 APP(Android)的设计、开发与维护,了解ios/鸿蒙开发;…

量子科技长三角产业创新中心 AI软件开发工程师岗位深度解析与面试指南

量子科技长三角产业创新中心 AI软件开发工程师 职位信息 岗位职责: 1、参与设计开发AI 软件栈开发,包括架构设计、推理引擎、异构调度、图优化、算子开发、算子分析性能优化、编译器优化、AI工具集等; 2、AI网络算子开发、调试优化、整网性能调优,包括算子融合、高性能算子…