P4870 [BalticOI 2009 Day1]甲虫 题解
简要题意
在一个数轴上有 \(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]甲虫 题解的更多相关文章
- P6739 [BalticOI 2014 Day1] Three Friends 题解
目录 写在前面 Solution 何为字符串哈希(可跳过): Code 写在前面 P6739 [BalticOI 2014 Day1] Three Friends 听说这题可以用比较暴力的做法过,比如 ...
- LOJ#2632. 「BalticOI 2011 Day1」打开灯泡 Switch the Lamp On
题目描述 译自 BalticOI 2011 Day1 T3「Switch the Lamp On」有一种正方形的电路元件,在它的两组相对顶点中,有一组会用导线连接起来,另一组则不会.有 N×M 个这样 ...
- A · F · O —— JLOI2018翻车记(附Day1简要题解)
JLOI2018翻车记 并不知道该怎么写... 算了还是按照标准剧情来吧 这应该是一篇写得非常差的流水账... 2018.04.04 Day -1 省选前在机房的最后一天. 压力并不是很大,毕竟联赛 ...
- 「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 括号树 ...
- luoguP6754 [BalticOI 2013 Day1] Palindrome-Free Numbers
目录 luoguP6754 [BalticOI 2013 Day1] Palindrome-Free Numbers 简述题意: Solution: Code luoguP6754 [BalticOI ...
- P6753 [BalticOI 2013 Day1] Ball Machine
P6753 [BalticOI 2013 Day1] Ball Machine 题意 给你一个树,每次从根节点放一个求,如果其子节点有空这个球会向下滚,若有多个节点为空则找儿子中以子树内编号的最小值为 ...
- JLOI2015 DAY1 简要题解
「JLOI2015」有意义的字符串 题意 给你 \(b, d, n\) 求 \[ [(\frac{b + \sqrt d}2)^n] \mod 7528443412579576937 \] \(0 & ...
- SCOI2016 Day1 简要题解
目录 「SCOI2016」背单词 题意 题解 代码 「SCOI2016」幸运数字 题意 题解 总结 代码 「SCOI2016」萌萌哒 题意 题解 总结 代码 「SCOI2016」背单词 题意 这出题人 ...
- SCOI 2015 Day1 简要题解
「SCOI2015」小凸玩矩阵 题意 一个 \(N \times M\)( $ N \leq M $ )的矩阵 $ A $,要求小凸从其中选出 $ N $ 个数,其中任意两个数字不能在同一行或同一列, ...
- [NOIP 2018 Day1] 简要题解
[题目链接] 铺设道路 : https://www.luogu.org/problemnew/show/P5019 货币系统 : https://www.luogu.org/problemnew/sh ...
随机推荐
- 攻防世界web高手进阶区-ics-06
今天借着这道web题顺便学会了利用burpsuite进行爆破 先摆题目 打开题目环境,发现是一个工程管理系统,根据题目找到报表中心,点进去 好像没什么收获,F12看一下,发现id =1,试了一下id= ...
- 刷了一个月AI歌唱的视频 做一个大胆预测
现在的AI热点转到ChatAI和AI唱歌去了 很好理解(现在每天在看Neuro的切片 感慨这才是看V的初心 可惜Neuro这个形象在创立的时候只是一个ChatAI 和游戏用的GameBOT并不是同一个 ...
- 2023年ccpc大学生程序设计竞赛-crf
第一次参加这种大型线下程序设计比赛,心情自然是很激动,但比赛中并没有想象中那么顺利,甚至可以说有些惊险,比赛开始的时候,我们三人随便看看题,顺便等着跟榜,对于签到题我们自然是相信clk可以很快地独立完 ...
- mysql:EXPLAIN
推荐阅读原文:EXPLAIN用法和结果分析 语法:EXPLAIN SELECT * FROM t1 使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句 ...
- 快速了解DevSecOps:构建安全软件开发的基石!
关键词 DevSecOps - 在不影响敏捷性的前提下,将安全充分融入到SDLC的所有环节中 SDLC-软件交付生命周期 SCA-软件组成分析-用于识别和检测软件中使用的开源/第三方组件的已知安全漏洞 ...
- 绕过PHP执行命令的函数执行系统cmd命令
<?php $evil=`set`; echo '<pre>'.$evil.'</pre>'; ?> 成功执行set命令,你懂的! 顺手写了个php执行cmd命令的 ...
- 利用CI机制管控jar依赖树
1. 现状·问题 你还记得你排查jar冲突的付出么? 为了有效控制jar包更新带来的未知jar引入和变动,我们经常使用dependency-tree来查看依赖关系排查问题,通常是出现问题再被动分析和排 ...
- Spring源码学习笔记13——总结篇, 从IOC到AOP
系列文章目录和关于我 零丶序言 在<Spring源码学习笔记12--总结篇,IOC,Bean的生命周期,三大扩展点>中,我们总结了Spring IOC部分的知识,为了更好的给群里的伙伴们分 ...
- 怎么选择API接口来获取自己想要的数据
在今天的数字时代,数据变得越来越重要,API接口也成为了获取数据的一种重要方式.无论是开发自己的应用程序还是进行市场营销,数据的获取都是非常必要的.但是,如何选择API接口来获取自己想要的数据呢? 以 ...
- Codeforces Round #576 (Div. 2)
A - City Day 题意:给n,x,y和数组a[n],求最小的下标d,使得有a[d-x,d-x+1,--d-1,d+1,d-1,d+1,--d+y-1,d+y]都比a[d]小,若d-x<= ...