P1545 [USACO04DEC] Dividing the Path G 题解

news/2025/10/8 13:41:32/文章来源:https://www.cnblogs.com/oSomiwww/p/19129542

P1545 [USACO04DEC] Dividing the Path G 题解

最近开始快刷蓝紫黑了,做完会写题解交上来。

题目传送门

题意

一条长为 \(L(1 \le L \le 10^6 , 2 | L)\) 的线段上,给出 \(N(1 \le N \le 10^3)\) 个可能相交的子段 \([S_i,E_i]\),现要求用若干个长度在 \([2a,2b]\) 中且为偶数的小线段覆盖整个大线段。

要求:

  • 整个大线段都要被覆盖。
  • 用来覆盖的小线段不相交。
  • 每个子段能且仅能被唯一一个小线段覆盖。
  • 小线段的范围不能超出大线段。

求出最少用来覆盖的小线段的个数。

分析

这道题暴力 \(O(L^2)\) 是好写的,设 \(dp_i\) 表示覆盖 \([0,i]\) 所需的小线段个数(显然 \(i\) 必须为某个子段的端点),答案明显为 \(dp_L\) ,边界也是显而易见的:\(dp_0=0\)

转移有如下式子:

\[dp_i=\min_{j=i-2b,2|j}^{i-2a}(dp_j+1) \]

然后交了一发就过了。

虽然数据较水,但我们仍需要考虑正解。

转移方程中,取最小值里的 \(+1\) 可以提出来,所以我们实际上是在求 \(\min dp_j\)

我们其实会很容易地发现这其实就是在一段区间里取最小值。

每次转移完当前点的值,我们都会把它当作下次转移时的区间里的一部分。

提炼一下:区间取 \(\min\),单点修改。

线段树可以很方便的处理掉,复杂度 \(O(L\log L)\)

AC Code
#include<bits/stdc++.h>
#define int long long 
#define rep(I,A,B) for(int I=(A);I<=(B);++I)
#define per(I,A,B) for(int I=(A);I>=(B);--I)
#define el puts("")
#define Yuki return 
#define daisuki 0
#define debug puts("SKIRK")
#define none 'N'
#define ed '\n'
#define pc putchar
using namespace std;
using pii=pair<int,int>;
//fastIO start
template<typename T>
void read(T &x){x=0;bool f=0;char c=getchar();for(;!isdigit(c);c=getchar())if(c=='-')f=1;for(;isdigit(c);c=getchar())x=(x<<3)+(x<<1)+(c^48);if(f)x=-x;
}
template<typename T,typename ...Args>
void read(T &x,Args &...args){read(x),read(args...);
}
template<typename T>
void write(T x,char ch=' '){if(x<0)putchar('-'),x=-x;static short st[70],tp;do st[++tp]=x%10,x/=10;while(x);while(tp)putchar(st[tp--]|48);if(ch!=none)putchar(ch);
}
void writes(string str){rep(i,0,str.size()-1)putchar(str[i]);
}
void writec(char chs){putchar(chs);
}
//fastIO end
const int N=1e3+5;
const int L=1e6+5;
const int inf=0x3f3f3f3f;
struct edge{int s,e;
}p[N];
int n,l,a,b;
bool vis[L];
int dp[L];
struct node{int l,r,mn;
}tr[L<<2];
void build(int p,int l,int r){tr[p].l=l;tr[p].r=r;tr[p].mn=inf;if(l==r)return ;int mid=l+r>>1;build(p<<1,l,mid);build(p<<1|1,mid+1,r);
}
int query(int p,int L,int R){int l=tr[p].l;int r=tr[p].r;if(r<L||l>R)return inf;if(L<=l&&r<=R)return tr[p].mn;return min(query(p<<1,L,R),query(p<<1|1,L,R));
}
void modify(int p,int L,int v){int l=tr[p].l;int r=tr[p].r;if(r<L||l>L)return ;if(l==r)return tr[p].mn=v,void();modify(p<<1,L,v);modify(p<<1|1,L,v);tr[p].mn=min(tr[p<<1].mn,tr[p<<1|1].mn);
}
signed main(){read(n,l,a,b);rep(i,1,n){read(p[i].s,p[i].e);rep(j,p[i].s+1,p[i].e-1)vis[j]=1;}memset(dp,0x3f,sizeof(dp));dp[0]=0;build(1,0,l);modify(1,0,0);for(int i=2;i<=l;i+=2){if(vis[i])continue;dp[i]=query(1,max(i-2*b,0ll),i-2*a)+1;modify(1,i,dp[i]);// rep(j,a,b){      //暴力转移//   int k=i-j*2;//   if(k<0)continue;//   Min(dp[i],dp[k]+1);// }}if(dp[l]>=inf)dp[l]=-1;write(dp[l]);Yuki daisuki;//Yuki真的是太可爱了捏
}  
//by oSomiwww

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

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

相关文章

AJ-Report - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

视频采集程序

项目结构:VideoCaptureApp.pro QT += core gui multimedia multimediawidgetsgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11win32 { LIBS += -L$$PWD/lib/SDL2/lib/x64 \-L$$PWD/lib/ffmpeg…

怎么做网站弄网盟wordpress qq微博

【客户行业】金属加工行业 【问题类型】薪酬体系/激励体系 【客户背景】 某大型金属加工企业位于河北地区&#xff0c;成立于2000年&#xff0c;隶属于某大型有色金属集团&#xff0c;是一家集科研、开发、生产、销售于一体的国有企业&#xff0c;人员达到1000人。经过多年…

50m专线做视频网站青羊区城乡建设网站

很多高手都喜欢使用“宏”命令来提高办公工作效率。但在 Microsoft Office 程序中使用宏时&#xff0c;总会弹出宏安全警告&#xff0c;这让使用者倍感麻烦。而如果把宏的安全级设置为“低”&#xff0c;就可以取消excel中宏安全提示框了&#xff0c;又增加了恶意代码和病毒攻击…

关于PPT的课后作业

动手动脑问题应用的是方法重载。 课后作业代码: import java.util.*; public class ArithmeticExam { private static final Random random = new Random(); private static final Scanner scanner = new Scanner(Sys…

学校网站源码html高端网站建设的品牌

I:ASP.NET MVC3 部署的前期工作 1.确认部署的服务器操作系统环境 首先我们确认服务器的操作系统版本可以从系统命令行工具里输入: systeminfo 获取相关操作系统信息例如然后再确认IIS版本信息 -> 打开IIS管理工具即可接着确认.NET Framework的版本可以在系统命令行工具执行:…

引擎搜索网站模板化学sem是什么意思

课程简介 现在还能做解说吗、不会写解说文案怎么解决、不会配音怎么解决、如何找到合适的素材资源、如何变现…这是很多想做解说的伙伴最关心的几大问题。比如文案&#xff0c;我们推荐一个网站&#xff0c;10分钟搞定一篇文案&#xff0c;配音可以真人配音也可以软件配音。5.…

RK 系列 GPU 驱动检查方法

问题背景 在调试一块板卡时发现 GPU 驱动存在异常。当时通过 GST 播放视频,想查看 GPU 占用率,却发现按照 RK 系列通常的查询方法无法获取(设备节点不存在),由此怀疑 GPU 驱动未正常加载。 检查方法 方法一:查看…

Day-15【选择与循环】选择结构-if语句 - 实践

Day-15【选择与循环】选择结构-if语句 - 实践2025-10-08 13:27 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: b…

做义工旅行有哪些网站wordpress验证码

Oracle提示错误消息ORA-28001: the password has expired&#xff0c;是由于Oracle11G的新特性所致&#xff0c; Oracle11G创建用户时缺省密码过期限制是180天&#xff08;即6个月&#xff09;&#xff0c; 如果超过180天用户密码未做修改则该用户无法登录。 Oracle公司是为了数…

咕乡

一篇模仿《王安遂》的拙作,以此纪念我初中的 OI 生涯。[1]我冒了严寒,回到相隔二千馀题,别了二十馀天的 OJ 去。 时候既然是初三;渐近 OJ 时,网络又崩溃了,404 吹进浏览器中,呜呜的响,从主页向外一望,泛白的 …

在东莞做网站广告专业的前景和就业方向

01为什么用 JavaScript 来开发桌面应用&#xff1f;曾经的 JavaScript 脆弱、简陋、甚至有被边缘化的危险&#xff0c;不过 JavaScript 在经过了两次飞跃后&#xff08;以 V8 为首的 JavaScript 引擎和 Node.js 的问世&#xff09;&#xff0c;不再受人欺负&#xff0c;早已升级…

opencv应用经典bug

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Linux随记(十八) - 详解

Linux随记(十八) - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &…

通信算法之281:大疆DJI无人机ID-DJI DroneID开源工程-相关问题-协议信息问题 - 实践

通信算法之281:大疆DJI无人机ID-DJI DroneID开源工程-相关问题-协议信息问题 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; f…

手机网站适应屏幕罗湖网站(建设深圳信科)

目录 1、一致性算法 1.1、什么是分布式系统的副本一致性?有哪些? 1.2、在分布式系统中有哪些常见的一致性算法?

唐山如何做百度的网站建设国际域名的外贸网站

以前公司每年都有年底总结&#xff0c;来新公司没有了年底总结&#xff0c;总觉得缺点什么&#xff0c;公司没有就自己写吧&#xff0c;人生感悟在这里就不多说了&#xff0c;本篇主要总结一下这一年来知识点吧。 这些知识点&#xff0c;每个慢慢整理&#xff0c;将来要保证&am…

全国设计网站建设服务器的作用

【opencv】【CPU】windows10下opencv4.8.0-cuda C版本源码编译教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【opencv】【CPU】windows10下opencv4.8.0-cuda C版本源码编译教程前言准备工具cmakeopencv4.8.0opencv_contrib CMake编译VS2…

Linux 文件 MD5 校验完全指南

Linux 文件 MD5 校验完全指南在 Linux 系统中,文件的完整性校验是数据安全的基础操作 —— 无论是下载软件包、传输备份文件,还是验证配置文件是否被篡改,MD5 校验都是最常用的轻量工具。MD5 算法通过对文件内容计算…

怎样找素材做网站wordpress联系方式

到目前为止&#xff0c;Robomongo仍是MongoDB最好的客户端管理工具&#xff0c;如需在Ubuntu上安装Robomongo&#xff0c;可直接从官网下载.tar.gz压缩包进行解压&#xff0c;然后直接运行bin目录下的robomongo文件即可启动界面。例如我将下载下来的.tar.gz压缩包解压到/usr/lo…