P2466 [SDOI2008] Sue 的小球

P2466 [SDOI2008] Sue 的小球

题目描述

Sue 和 Sandy 最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue 有一支轻便小巧的小船。然而,Sue 的目标并不是当一个海盗,而是要收集空中漂浮的彩蛋,Sue 有一个秘密武器,只要她将小船划到一个彩蛋的正下方,然后使用秘密武器便可以在瞬间收集到这个彩蛋。然而,彩蛋有一个魅力值,这个魅力值会随着彩蛋在空中降落的时间而降低,Sue 要想得到更多的分数,必须尽量在魅力值高的时候收集这个彩蛋,而如果一个彩蛋掉入海中,它的魅力值将会变成一个负数,但这并不影响 Sue 的兴趣,因为每一个彩蛋都是不同的,Sue 希望收集到所有的彩蛋。

然而 Sandy 就没有 Sue 那么浪漫了,Sandy 希望得到尽可能多的分数,为了解决这个问题,他先将这个游戏抽象成了如下模型:

将大海近似的看做 \(x\) 轴建立一个竖直的平面直角坐标系,Sue 所在的初始位置在 \(x\) 轴上。

一开始空中有 \(N\) 个彩蛋,对于第 \(i\) 个彩蛋,他的初始位置用整数坐标 \((x_{i}, y_{i})\) 表示,游戏开始后,它匀速沿 \(y\) 轴负方向下落,速度为 \(v_{i}\) 单位距离/单位时间。Sue 的初始位置为 \((x_{0}, 0)\),Sue 可以沿 \(x\) 轴的正方向或负方向移动,Sue 的移动速度是 \(1\) 单位距离/单位时间,使用秘密武器得到一个彩蛋是瞬间的,得分为当前彩蛋的 \(y\) 坐标的千分之一。

现在,Sue 和 Sandy 请你来帮忙,为了满足 Sue 和 Sandy 各自的目标,你决定在收集到所有彩蛋的基础上,得到的分数最高。

输入格式

第一行为两个整数 \(N\), \(x_{0}\) 用一个空格分隔,表示彩蛋个数与 Sue 的初始位置。

第二行为 \(N\) 个整数 \(x_{i}\),每两个数用一个空格分隔,第 \(i\) 个数表示第 \(i\) 个彩蛋的初始横坐标。

第三行为 \(N\) 个整数 \(y_{i}\),每两个数用一个空格分隔,第 \(i\) 个数表示第 \(i\) 个彩蛋的初始纵坐标。

第四行为 \(N\) 个整数 \(v_{i}\),每两个数用一个空格分隔,第 \(i\) 个数表示第 \(i\) 个彩蛋匀速沿 \(y\) 轴负方向下落的的速度。

输出格式

一个实数,保留三位小数,为收集所有彩蛋的基础上,可以得到最高的分数。

输入输出样例 #1

输入 #1

3 0
-4 -2 2
22 30 26
1 9 8

输出 #1

0.000

说明/提示

对于 \(30\%\) 的数据, \(N\leq 20\)

对于 \(60\%\) 的数据, \(N\leq 100\)

对于 \(100\%\) 的数据,\(-10^4 \leq x_{i},y_{i},v_{i} \leq 10^4\)\(N \leq 1000\)

题意概括

Sue 在 x 轴上移动,从给定初始位置出发,收集所有初始位置和下落速度已知的彩蛋,以最大化所有彩蛋被收集时剩余纵坐标值的总和(得分为其千分之一)。

思路

这种属于在数轴中移动并且代价与时间相关,时间又和位置,速度相关的题,一般会考虑设 \(f_{i,j,0/1}\) 指完成 \([i,j]\) 之间的东西,停在 \(i/j\) 上的最优答案,那么本题也可以这么做

\(f_{i,j,0/1}\) 指吃完 \([i,j]\) 之间的所有彩蛋 ( \(i,j\) 都是彩蛋的编号),停在左端/右端的最大得分

那么转移很自然, \(f_{i,j,0}\) 肯定是从 \(f_{i+1,j,0}\) 或者 \(f_i+1,j,1\) 转移过来的, \(f_{i,j,1}\) 也当然是从 \(f_{i,j-1,0}\) 或者 \(f_{i,j-1,1}\) 转移的。

然后发现就错了

因为正确的dp要满足无后效性,也就是说当前决策不影响后续决策或者未来决策,但是这里显然有影响,故考虑换一种方式

\(f_{i,j,0/1}\) 指吃完 \([i,j]\) 之间的所有彩蛋 ( \(i,j\) 都是彩蛋的编号),停在左端/右端的最小得分损失

转移同上,但是这样做就可以发现状态值的含义改变使得这样dp就满足了无后效性的条件

posted @ 2025-07-29 16:31  shencheng4014  阅读(13)  评论(0)    收藏  举报