【BZOJ1597】【Tyvj2461】土地购买,第一次的斜率优化DP

本文深入探讨斜率优化DP技术,通过去除无效边并利用单调队列实现优化,将复杂度从O(n^2)降低到更高效的形式。文章详细介绍了两步优化过程及其实现代码。

传送门1
传送门2
写在前面:看了好久斜率优化DP,感觉还是不太懂
思路:
(受大牛博文启发)
1.除去无效边,li>=lj且ri>=rj,则j可以直接扔掉不要。因此我们可以按l或r排一下序,除去以上情况的无效边,之后剩下的边l,r一定是
一个升序一个降序(我这里是让r降序,l升序)
2.DP方程构建,原始方程:
f[i]=min(f[j]+max(l[j+1]..l[i])max(r[j+1]..r[i]))j[1,i1]
既然已经有序,那么方程变成
f[i]=min(f[j]+l[i]r[j+1])j[1,i1]
复杂度为 O(n2) ,显然不能满足要求,所以就要请出主角——斜率优化

设在当前的状态f[i]时,从f[j]转移比f[k]优。那么该情况等价于f[j]+r[j+1]*l[i]<f[k]+r[k+1]*l[i]
化简一下:l[i]<(f[k]-f[j])/(r[j+1]-r[k+1])。说明,假设j和k满足上述要求,k能够无视了,由于j一定比k更优

以上为第一步优化,即从单调队列队首删除元素
第二步优化中,沙茶的我看了半天标程都没看懂,最后在纸上写了些,并看看其他讲解才勉强有所体悟,设当前元素为i,那么i再经过第一步后已经求出了f[i],并将要加入队尾,再加入队尾前肯定要删去一些不优的元素。

令g[j,k] = (f[k]-f[j])/(x[j] - x[k]) 则g[j,k] > y[i] 表示j比k更优。则k可以舍弃掉
进而我们发现这么一个问题,当c < b < a < i时,如果有g[c, b] > g[b,
a],那么b永远都不会成为计算dp[i]时的决策点。 证明: 如果g[c, b] > g[b, a],那么我们可以分两个方面考虑g[c,
b]与的关系: (1)如果g[c, b] >= y[i],那么决策c不会比决策b差,也就说决策b不可能是决策点 (2)如果g[c, b] <
y[i],那么由于g[c, b] > g[b, a],那么g[b, a] < y[i],那么决策a要比决策b好,所以b还不能作为决策点

注意:
1.开LL很关键,不要吝惜一点点的空间
2.随机数据真的很随机,试了好多组都和标程一样,交上去就WA
3.当你不知道单调队列怎么优化时,让i=0循环是个不错的选择
代码:

#include<bits/stdc++.h>
#define LL long long
using namespace std;
int n,tot,head=1,tail=0;
LL f[500010];
struct os
{
    LL l,r;
}a[500010],b[500010];
struct node
{
    LL x,y;
}q[500010];
int cmp(os x,os y)
{
    return x.r>y.r;
}
main()
{
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
    scanf("%lld%lld",&a[i].l,&a[i].r);
    sort(a+1,a+n+1,cmp);
    for (int i=1;i<=n;i++)
    if (!tot||b[tot].l<a[i].l)
    b[++tot].l=a[i].l,
    b[tot].r=a[i].r;
    for (int i=0;i<=tot;i++)
    {
        while (head<tail&&q[head+1].y-q[head].y<b[i].l*(q[head].x-q[head+1].x)) head++;
        f[i]=q[head].y+q[head].x*b[i].l;
        while (head<tail&&(f[i]-q[tail-1].y)*(q[tail].x-b[i+1].r)>=(f[i]-q[tail].y)*(q[tail-1].x-b[i+1].r)) tail--;
        q[++tail].y=f[i];
        q[tail].x=b[i+1].r;
    }
    printf("%lld",f[tot]);
}
内容概要:本文系统性地介绍了Neo4j图数据库的技术体系、核心原理与企业级实战应用,涵盖从基础理论到生产落地的完整知识链条。深入剖析了Neo4j作为原生图数据库在存储架构、数据模型、查询语言(Cypher)方面的核心技术优势,重点讲解其基于节点、关系、属性的三元组模型和原生图存储机制,对比传统关系型数据库在处理复杂关联数据时的性能瓶颈。文档全面覆盖环境部署、工业级建模规范、Cypher深度编程、海量数据导入、Python/Java全栈开发集成、图算法分析(GDS)、高可用集群搭建及性能调优等内容,并通过金融风控知识图谱项目实现端到端的综合实战演练,提供可直接复用的建模模板、优化方案与故障排查手册。; 适合人群:具备一定数据库基础,从事大数据、人工智能、金融风控、知识图谱等相关领域的研发人员、架构师及数据工程师,尤其适合工作1-5年希望掌握图数据库企业级开发能力的技术人员。; 使用场景及目标:①掌握Neo4j在金融风控、社交网络、知识图谱等复杂关联场景下的建模与查询能力;②实现海量图数据的高效导入、集群部署与性能优化;③结合GDS图算法进行社群发现、路径分析、核心节点挖掘等智能分析任务;④构建前后端一体化的企业级图谱可视化系统。; 阅读建议:此资源强调工程化与生产级落地,建议结合实际项目边学边练,重点关注建模规范、索引设计、Cypher执行计划优化与集群运维等关键环节,配套源码与配置模板应作为开发参考标准使用。
代码下载链接: https://pan.quark.cn/s/a4b39357ea24 网站扒站工具,如标题所述,是用于复制或仿制网站内容的技术手段。 这些工具能够帮助用户抓取网站上的HTML代码、图片、CSS样式表、JavaScript文件等资源,以实现快速构建与原网站相似的新站点。 在IT行业中,这种行为有时被称为网页抓取或网页克隆,对于学习、分析或测试网站设计有着重要作用。 Teleport Ultra 是一款知名的扒站工具,它允许用户以一种系统化的方式下载整个网站到本地计算机上,以便离线查看或进一步分析。 以下是对Teleport Ultra及其功能的详细介绍: 1. **全面抓取**:Teleport Ultra能深入网站的每一个角落,不仅抓取首页,还能追踪链接,将整个网站的结构、内容和资源都下载下来。 这包括静态页面、动态内容、登录后的页面等。 2. **自定义设置**:用户可以设定抓取范围,例如只抓取特定目录,或者排除某些不想要的页面。 此外,还可以设置代理服务器,以匿名方式抓取,避免被目标网站检测到。 3. **时间调度**:对于大型或需要分时段抓取的网站,Teleport Ultra支持定时任务,可以在指定的时间自动开始抓取工作。 4. **内容过滤**:该工具允许用户过滤掉不需要的元素,如广告、脚本或图片,只保留核心内容。 5. **网站镜像**:完成抓取后,Teleport Ultra可以创建一个完整的网站镜像,包括所有链接关系,使得在本地浏览时体验与在线网站几乎一致。 6. **报告生成**:它还提供详细的抓取报告,包括未成功下载的页面、错误信息等,方便用户检查和修复问题。 7. **易于使用**:Teleport Ultra的界面直观,即使对编程不...
源码下载地址: https://pan.quark.cn/s/a4b39357ea24 Electron-Lark release-download-count 下载地址: Release electron 版的飞书 Feishu (原 Lark),对网页版本进行封装 相比起普通网页版,功能如下 独立的运行窗口,不容易误关闭 关闭程序时后台运行,隐藏到通知栏小图标,双击可重新打开界面 新消息提醒,状态栏小图标闪烁 解除浏览器限制,避免因浏览器版本不对而提示无法使用 已知问题 - 部分功能无法使用(工作台/会议等) - 飞书网页版缺陷,请向官方反馈 历史问题 - ~~ubuntu18.04 Gnome 桌面,锁屏之后,系统通知栏图标 Tray 会消失, 当前规避方案如下~~ - ~~当有新消息提醒的时候,会重置通知栏图标 tray,保证哪怕因为锁屏导致 tray 消失,在收到新消息之后也会重新出现并闪烁~~ - 使用 alt + shift + m 的快捷键,重新显示界面以及 dock 图标 - ~~V1.0.3 版本已修复,添加了一个 linux 锁屏监听,自动 reset appTray~~ - V1.1.1 版本升级了 electron 依赖,问题解决~ (另外有一说一, 飞书的技术架构就是基于 Electron 的, Windows 和 Mac 客户端也都是使用 Electron 打包, 既然如此为什么不顺便为 Linux 也提供支持呢 ?) - 2021-04-26更新:后知后觉 deepin 商店已经有 wine 版本的飞书了,详情可看这个 deepin官方帖子 如果公司使用的并不是自己部署版本的飞书的话,可以尝试一下,ubuntu 上面可以再加一个 d...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值