T4 解析

对于 \(20 \%\) 的数据范围, 保证 \(1\le T \le 20, 1 \le n \le 300,1 \le a_i \le b_i \le 10^4, 1 \le d_i \le 10^4\) ,所有的 \([a_i, b_i]\) 互不包含,

说明每个区域只能单独去采摘,所以答案是 \(\sum d_i\) 。

对于额外的 \(20\%\) 的数据范围,保证 \(1\le T \le 20, 1 \le n \le 300,1 \le a_i \le b_i \le 10^4, 1 \le d_i \le 10^4\) ,所有的 \([a_i, b_i]\) 相等,

说明所有区域成熟的时间相同,可以在同一时间采摘,为了节省距离,直接选择最远的距离即可,答案是 \(max(d_i)\)。

对于 \(100 \%\) 的数据范围,首先考虑将时间看作区间范围,作为 \(x\) 轴的变换方向,另外距离当作 \(y\) 轴,此时将问题转换为区间内选多条直线覆盖所有的区间,如

一条直线覆盖多个区间,取区间的最高的距离当作答案的一部分,求解距离和的最小值。

此时很多同学会想到,直接采用区间贪心的方式,按照右端点从小到大排序,然后进行从右往左进行选择,

如果按照区间贪心的方式,可以获取一部分分数

存在hack数据

1
5
3 4 2
2 8 2
3 4 1
4 5 4
1 3 1

将时间看成横向的 \(x\) 坐标, 距离看成竖向的 \(y\) 坐标之后

发现线段整体是一个区间,考虑区间 \(dp\) 如何计算?这是本题的难点,在此之前可以先把简单的过程写清楚

步骤一、定义状态

\(dp[l][r]\) 表示区间范围 \([l, r]\) 之内覆盖所有线段的距离最小值

步骤二、确定答案

此时因为时间范围有些大,通过离散化的形式,将时间区间转换为 \(600\) 个离散化单位,最终离散化的区间从 \([1, 10000]\) 转换为 \([1, tot]\) 。

答案变成 \(dp[1][tot]\) 。

重点

步骤三、状态转移

先写出状态转移

dp[l][r] = dp[l][m - 1] + dp[m + 1][r] + d, 其中d是区间[l, r] 内完全被包含的线段的最高点

看下图,这里画的竖线表示这里派出了员工,采摘距离最远的 \(4\) ,黄色线段,顺便将下面的暗红色线段 \([2, 8]\) 也给覆盖了,

我们会清晰的发现,在一段区间内,最高点所在的线段的选取,一定会影响它顺便可以覆盖到的答案。

此时我们的答案之和左边区间的答案和右边区间的答案有关,

另外右边区间内出现了 \([2, 8]\) 这条已经被选中的线段,被右边区域包含一部分,

这里不能重复计算,所以我们制定一个规则,参与 \(dp[l][r]\) 答案计算的区间,一定是能够完全被 \([l,r]\) 范围包含的。

为了方便大家理解,以刚刚左边区间的为例

此时我们的转移断点 \(m\) 只在完全被包含的所有区间内找到的最高的那条范围内

比如此时的 \(m\) 的移动范围是 \([F, G]\) ,为什么 \(D\) 所在的线段不计入答案,因为它只有一部分在区间内,肯定有外面的区间把它包含进去了,比如上面的图。

接下来只需要考虑线段 \([F, G]\) 这个最高的区间范围的影响,在这段范围内,只要选中 \([F, G]\) 之中的任意一点, 此时被覆盖的范围是没有机会的,所以依靠这个

移,然后考虑 dp[l][m - 1] 和 dp[m + 1][r]

因为一定是距离比较低的小区间,比如 \([A, B]\) 先更新,然后区间扩大到 \([A, G]\) 的时候,考虑最高点的影响,

最高点选中之后覆盖的某些高点之后,左侧的最高 dp[l][m - 1] 和右侧的最高 dp[m + 1][r] 的答案,区间是一段一段合并的,所以合并之后,

得到的就是总距离。

本题属于线段类型的区间 \(dp\) , 整体思维和实现难度非常高,请同学们反复去看几遍。

U558032 芒果的收获季-区间dp的更多相关文章

  1. 区间dp总结篇

    前言:这两天没有写什么题目,把前两周做的有些意思的背包题和最长递增.公共子序列写了个总结.反过去写总结,总能让自己有一番收获......就区间dp来说,一开始我完全不明白它是怎么应用的,甚至于看解题报 ...

  2. hdu2476 String painter(区间dp)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2476 Problem Description There are two strings ...

  3. 【BZOJ-4380】Myjnie 区间DP

    4380: [POI2015]Myjnie Time Limit: 40 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 162  Solved: ...

  4. 【POJ-1390】Blocks 区间DP

    Blocks Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5252   Accepted: 2165 Descriptio ...

  5. 区间DP LightOJ 1422 Halloween Costumes

    http://lightoj.com/volume_showproblem.php?problem=1422 做的第一道区间DP的题目,试水. 参考解题报告: http://www.cnblogs.c ...

  6. BZOJ1055: [HAOI2008]玩具取名[区间DP]

    1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1588  Solved: 925[Submit][Statu ...

  7. poj2955 Brackets (区间dp)

    题目链接:http://poj.org/problem?id=2955 题意:给定字符串 求括号匹配最多时的子串长度. 区间dp,状态转移方程: dp[i][j]=max ( dp[i][j] , 2 ...

  8. HDU5900 QSC and Master(区间DP + 最小费用最大流)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5900 Description Every school has some legends, ...

  9. BZOJ 1260&UVa 4394 区间DP

    题意: 给一段字符串成段染色,问染成目标串最少次数. SOL: 区间DP... DP[i][j]表示从i染到j最小代价 转移:dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k ...

  10. Uva 10891 经典博弈区间DP

    经典博弈区间DP 题目链接:https://uva.onlinejudge.org/external/108/p10891.pdf 题意: 给定n个数字,A和B可以从这串数字的两端任意选数字,一次只能 ...

随机推荐

  1. LLM主要架构

    LLM本身基于Transformer架构 自2017年,Attention is all you need诞生起,原始的Transformer模型不同领域的模型提供了灵感和启发 基于原始的Transf ...

  2. 操作系统 -- 第一个C函数

    前面我们为调用Cosmos 的第一个C函数hal_start做了大量的工作,本节要让操作系统Cosmos里的第一个C语言真正跑起来. 继续在hal_start函数里,首先执行板级初始化,其实就是hal ...

  3. footer固定在页面底部的几种方法(转载)

    几种非常不错的方法,收藏学习:原文见https://blog.csdn.net/m0_37070714/article/details/77587753 方法一:footer高度固定+绝对定位 < ...

  4. 启用 Java AOT 编译打包 Solon 项目(Solon AOT)

    1.Java 的 AOT(Ahead-Of-Time) AOT(Ahead-Of-Time)编译是与 JIT(Just-In-Time)相对的一种编译方式. 在 AOT 模式下,Java 字节码(By ...

  5. Game Changer:AI面试助手“面试精灵”重磅发布

    引言 在职场竞争日益激烈的今天,面试已成为决定职业发展的关键一步.许多专业人士虽然在专业领域拥有深厚的知识,却可能缺乏面试技巧.为了帮助这些专业人士更轻松地获得理想的工作,我们推出了革命性的AI面试助 ...

  6. 双 CDN 加速 + 智能调度

    转载自我的个人博客:双 CDN 加速 + 智能调度 |未名小站 DeepSeek 的官网是一个很典型的双 CDN 加速的场景,当我们使用 IT-Dog 对其发起多地 Ping 的时候,可以看到国内使用 ...

  7. 假如给你1亿的Redis key,如何高效统计?

    前言 有些小伙伴在工作中,可能遇到过这样的场景:老板突然要求统计Redis中所有key的数量,你随手执行了KEYS *命令,下一秒监控告警疯狂闪烁--整个Redis集群彻底卡死,线上服务大面积瘫痪. ...

  8. k8s service访问偶发超时问题

    问题现象 在某个集群节点上的服务访问service服务:端口,会出现偶发timeout的问题,集群有的节点不会出现访问timeout的问题 问题处理 查看bridge-nf-call-iptables ...

  9. Chiplet封装技术的应用现状

    这是IC男奋斗史的第39篇原创 本文1651字,预计阅读4分钟. 接上文:Chiplet解决芯片技术发展瓶颈 Chiplet封装的产品介绍 以下介绍几款国内外使用Chiplet封装技术的代表产品,包括 ...

  10. AI应用实战课学习总结(7)聚类算法分析实战

    大家好,我是Edison. 最近入坑黄佳老师的<AI应用实战课>,记录下我的学习之旅,也算是总结回顾. 今天是我们的第7站,一起了解下聚类算法基本概念 以及 通过聚类算法辅助用户画像的案例 ...