题目链接

简要题意

在一个数轴上有 \(n\) 滴露水,每滴露水初始水量为 \(m\),每秒会蒸发一滴水,一个甲虫初始在原点,速度为 1,水能瞬间喝完,问它最多能喝到几滴水。

题目分析

对于这种移动区间连续的题目,我们首先考虑区间 dp,记 \(f_{l,r,0}\) 表示喝完区间 \([l,r]\) 的水且在左边表示的最小时间,第三维为 1 的时候在右边,据此设计转移。

但是我们发现本题中多了一维时间,强行增加维度时间复杂度会爆,我们考虑控制变量。

可以发现,上述转移最大的问题在于我们不知道转移之后每个水滴的剩余水量,而剩余水量和最多的水都可以通过已蒸发的水量和总共经过的水滴数求出,转换后复杂度降低,符合我们的要求。

于是我们把储存对象改为已蒸发水量,外层枚举一个总共经过的水滴数,定义喝完当前的水后还差 \(k\) 滴水没喝,\(val\) 为排序后的水滴横坐标,可以得到状态转移方程:

\(f_{l,r,0}=\min(f_{l+1,r,1}+k \times |val_r-val_l|,f_{l+1,r,0}+k \times |val_{l+1}-val_l|)\)

\(f_{l,r,1}=\min(f_{l,r-1,1}+k \times |val_r-val_{r-1}|,f_{l,r-1,0}+k \times |val_{l}-val_{r}|)\)

实现时还需要注意特判只喝一个水滴时的边界情况。

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define ll long long
using namespace std;
ll n,m;
ll val[1000001];
ll dp[301][301][2];
ll calc(int lim){
ll ans=0x3f3f3f3f3f3f3f3f;
for(int len=1;len<=lim;len++){
for(int l=1;l+len-1<=n;l++){
int r=l+len-1;
if(len==1)dp[l][r][0]=dp[l][r][1]=lim*abs(val[l]);
else{
dp[l][r][0]=dp[l][r][1]=0x3f3f3f3f3f3f3f3f;
dp[l][r][0]=min(dp[l][r][0],dp[l+1][r][0]+(lim-len+1)*abs(val[l+1]-val[l]));
dp[l][r][0]=min(dp[l][r][0],dp[l+1][r][1]+(lim-len+1)*abs(val[r]-val[l]));
dp[l][r][1]=min(dp[l][r][1],dp[l][r-1][1]+(lim-len+1)*abs(val[r]-val[r-1]));
dp[l][r][1]=min(dp[l][r][1],dp[l][r-1][0]+(lim-len+1)*abs(val[l]-val[r]));
}
if(len==lim) ans=min(ans,min(dp[l][r][0],dp[l][r][1]));
}
}
return ans;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>val[i];
sort(val+1,val+n+1);
ll ans=0;
for(int i=1;i<=n;i++)ans=max(ans,i*m-calc(i));
cout<<ans<<endl;
}

P4870 [BalticOI 2009 Day1]甲虫 题解的更多相关文章

  1. P6739 [BalticOI 2014 Day1] Three Friends 题解

    目录 写在前面 Solution 何为字符串哈希(可跳过): Code 写在前面 P6739 [BalticOI 2014 Day1] Three Friends 听说这题可以用比较暴力的做法过,比如 ...

  2. LOJ#2632. 「BalticOI 2011 Day1」打开灯泡 Switch the Lamp On

    题目描述 译自 BalticOI 2011 Day1 T3「Switch the Lamp On」有一种正方形的电路元件,在它的两组相对顶点中,有一组会用导线连接起来,另一组则不会.有 N×M 个这样 ...

  3. A · F · O —— JLOI2018翻车记(附Day1简要题解)

    JLOI2018翻车记 并不知道该怎么写... 算了还是按照标准剧情来吧 这应该是一篇写得非常差的流水账... 2018.04.04 Day -1 省选前在机房的最后一天. 压力并不是很大,毕竟联赛 ...

  4. 「CSP-S」2019年第一届Day1游记+题解

    「CSP-S」2019年第一届Day1游记+题解 Day 1 7:30 A.M. 8:10 A.M. 8:30 A.M. T1 格雷码 题目 考场经历+思考(正解) 8:50 A.M. T2 括号树 ...

  5. luoguP6754 [BalticOI 2013 Day1] Palindrome-Free Numbers

    目录 luoguP6754 [BalticOI 2013 Day1] Palindrome-Free Numbers 简述题意: Solution: Code luoguP6754 [BalticOI ...

  6. P6753 [BalticOI 2013 Day1] Ball Machine

    P6753 [BalticOI 2013 Day1] Ball Machine 题意 给你一个树,每次从根节点放一个求,如果其子节点有空这个球会向下滚,若有多个节点为空则找儿子中以子树内编号的最小值为 ...

  7. JLOI2015 DAY1 简要题解

    「JLOI2015」有意义的字符串 题意 给你 \(b, d, n\) 求 \[ [(\frac{b + \sqrt d}2)^n] \mod 7528443412579576937 \] \(0 & ...

  8. SCOI2016 Day1 简要题解

    目录 「SCOI2016」背单词 题意 题解 代码 「SCOI2016」幸运数字 题意 题解 总结 代码 「SCOI2016」萌萌哒 题意 题解 总结 代码 「SCOI2016」背单词 题意 这出题人 ...

  9. SCOI 2015 Day1 简要题解

    「SCOI2015」小凸玩矩阵 题意 一个 \(N \times M\)( $ N \leq M $ )的矩阵 $ A $,要求小凸从其中选出 $ N $ 个数,其中任意两个数字不能在同一行或同一列, ...

  10. [NOIP 2018 Day1] 简要题解

    [题目链接] 铺设道路 : https://www.luogu.org/problemnew/show/P5019 货币系统 : https://www.luogu.org/problemnew/sh ...

随机推荐

  1. Maven项目配置

    pom.xml配置 配置编码格式为UTF-8 <properties> <project.build.sourceEncoding>UTF-8</project.buil ...

  2. java协程线程之虚拟线程

    前言 众所周知,java 是没有协程线程的,在我们如此熟知的jdk 1.8时代,大佬们想出来的办法就是异步io,甚至用并行的stream流来实现,高并发也好,缩短事件处理时间也好:大家都在想着自己认为 ...

  3. 解决Oracle jdbc驱动包maven下载失败问题

    由于Oracle版权限制,其jdbc驱动包不让人随便下载,这就给maven的下载和编译带来了麻烦. 解决办法是先获取jar包(方法一:去oracle官网下载,方法二:去oracle安装目录如produ ...

  4. Cilium系列-8-绕过 IPTables 连接跟踪

    系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, ...

  5. 数据分析师如何用SQL解决业务问题?

    本文来自问答. 提问:数据分析人员需要掌握sql到什么程度? 请问做一名数据分析人员,在sql方面需要掌握到什么程度呢?会增删改查就可以了吗?还是说关于开发的内容也要会?不同阶段会有不同的要求吗? 正 ...

  6. centos7.X安装mysql5.7 – 东凭渭水流

    1.下载mysql5.7 可以使用windows下载好后上传至Linux.网络条件好的推荐使用 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/m ...

  7. KVM下windows由IDE模式改为virtio模式蓝屏 开不开机

    KVM安装Windows默认使用的是qemu虚拟化IDE硬盘模式,在这种情况下,IO性能比较低,如果使用virtio的方式可以提高虚拟机IO性能. 于是我想将这台虚拟机迁移到openstack中管理 ...

  8. 推荐一个react脚手架工具

    今天介绍一个react脚手架,react-cli, 可以说是 vue-cli 的外表,react的心! 安装步骤: npm install -g sao sao yang302/react-cli n ...

  9. .Net8 AOT+VMP简单的逆向分析

    1.前言 测试下VMP加密.NET的强度,选了最新的.Net8+AOT编译,用VMP给它加壳.最后逆向下,简单的分析,本篇看下. 2.概述 一.前奏 首先一段简单的C#代码: namespace Te ...

  10. 3 分钟把高质量 AI 知识库 FastGPT 装进企业微信

    FastGPT V4 已经上线,直接冲上 GitHub Trending. 如果你还不知道 FastGPT 是什么,可以先去看看作者的介绍 使用 FastGPT 构建高质量 AI 知识库 非常多的企业 ...