当前位置: 首页 > news >正文

P1545 Dividing the Path G(线段树+动态规划)

P1545 Dividing the Path G(线段树+动态规划)

题目传送门

题意简化

使用长度为2A$\sim$2B的区间覆盖长度为L的线段,并给出n个子区间,要求每个子区间仅被同一区间覆盖,求最小的区间使用数量

思路

考虑\(dp_i\)表示覆盖0\(\sim\)L范围的最小使用数量,一条右端点在i处的线段左端点范围为i-2B\(\sim\)i-2A,我们可以在该范围内找出最小的dp值用于更新\(dp_i\),使用线段树维护区间内最小的dp值

Code

//dp[i]=min(dp[j])+1,j->[i-2b,i-2a]
#include<iostream>
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
const int N=1e6+5;
struct SegmentTree
{struct node{int l,r,data;}Tree[N<<2];int lazy[N<<2];void pushup(int k){Tree[k].data=min(Tree[k<<1].data,Tree[k<<1|1].data);}void pushdown(int k){if(!lazy[k]) return;lazy[k<<1]=lazy[k];Tree[k<<1].data=lazy[k];lazy[k<<1|1]=lazy[k];Tree[k<<1|1].data=lazy[k];lazy[k]=0;}void buildtree(int k,int L,int R){Tree[k].l=L,Tree[k].r=R;if(L==R){Tree[k].data=0x3f3f3f3f;return;}int Mid=(L+R)>>1;buildtree(k<<1,L,Mid);buildtree(k<<1|1,Mid+1,R);pushup(k);}void modify(int k,int L,int R,int val){if(L<=Tree[k].l&&Tree[k].r<=R){Tree[k].data=val;lazy[k]=val;return;}pushdown(k);if(L<=Tree[k<<1].r)modify(k<<1,L,R,val);if(R>=Tree[k<<1|1].l)modify(k<<1|1,L,R,val);pushup(k);}int query(int k,int L,int R){if(L<=Tree[k].l&&Tree[k].r<=R)return Tree[k].data;pushdown(k);int res=0x3f3f3f3f;if(L<=Tree[k<<1].r)res=min(res,query(k<<1,L,R));if(R>=Tree[k<<1|1].l)res=min(res,query(k<<1|1,L,R));return res;}
}Segment;
bool vis[N];
int n,len,A,B,dp[N];
int main()
{IOS;cin>>n>>len>>A>>B;Segment.buildtree(1,0,len);Segment.modify(1,0,0,0);//dp[0]赋初始值为0for(int i=1;i<=n;i++){int st,ed;cin>>st>>ed;for(int j=st+1;j<=ed-1;j++)vis[j]=true;}for(int i=2*A;i<=len;i+=2){if(vis[i]) continue;int L=max(0,i-2*B),R=i-2*A,tmp=Segment.query(1,L,R);//注意边界问题dp[i]=tmp+1,Segment.modify(1,i,i,dp[i]);//每次求得dp[i]后更新线段树中的值}cout<<(dp[len]>=0x3f3f3f3f?-1:dp[len])<<'\n';return 0;
}

完结撒花~

http://www.sczhlp.com/news/302.html

相关文章:

  • .NET4通过HTTP操作MINIO
  • Gitee:重塑中国企业级研发基础设施的三大战略支点
  • SAP生产订单报工的“最终确认”、“结清未清预留”,你真弄清楚了吗?
  • 基于图像处理与SVM的验证码识别系统实现
  • 基于因子图与和积算法的MATLAB实现
  • 【文献阅读】AnyEdit:编辑语言模型中编码的任何知识
  • Web前端入门第 82 问:JavaScript cookie 有大小限制吗?溢出会怎样?
  • 二分
  • lazarus无法编译Linux下的动态库
  • 微信小程序提示不在合法域名问题
  • Clop勒索团伙针对MoveIt Transfer软件的大规模攻击活动分析
  • 语音解耦技术推动语音AI的多样性与包容性
  • 银河麒麟V10离线安装 tomcat 9 记录
  • fiddler篡改数据
  • Docker
  • SpringMVC具体的工作流程
  • SketchUp 2021+必备插件|AFU321 v5.5.6安装与使用说明
  • SketchUp纹理神器:Architextures插件安装与使用教程(图文详解)
  • redis-基本使用
  • nepCTF2025 pwn题解
  • 论文解读《GradEscape: A Gradient-Based Evader Against AI-Generated Text Detectors》
  • 使用 DeepSpeed ZeRO、LoRA 和 Flash Attention 微调 Falcon 180B
  • 28、快捷键
  • linux系统添加Arial字体
  • 基于卷积神经网络的验证码识别系统设计与实现
  • 【数据库索引标准结构】B+树原理详解与B树对比优势
  • 12N90-ASEMI电源逆变器专用12N90
  • Locust入门及最佳实践
  • Gitee Git自建平台:企业级代码托管的安全之选
  • Java核心面试技术