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就满足了无后效性的条件

浙公网安备 33010602011771号