洛谷P2466 [SDOI2008] Sue 的小球 题解

题目链接:P2466 [SDOI2008] Sue 的小球

题意

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

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

将大海近似的看做 xxx 轴,以 Sue 所在的初始位置作为坐标原点建立一个竖直的平面直角坐标系。

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

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

对于 100%100\%100% 的数据,−104≤xi,yi,vi≤104-10^4 \leq x_{i},y_{i},v_{i} \leq 10^4−104≤xi​,yi​,vi​≤104,N≤1000N \leq 1000N≤1000

首先先将彩蛋按 xxx 排序

因为可以左右走,可以想到这是一个区间dp

设 f0/1,i,jf_{0/1,i,j}f0/1,i,j​ 表示区间 [i,j][i,j][i,j] 的彩蛋都被收集后的最小花费(代价),0/1表示此时在 iii 还是 jjj

转移方程?

注意到当前的决策会受到之前决策的影响,也就是当前的时刻我们并不清楚

考虑增加一维?那就是暴力解法了

那怎么处理这个时刻的问题呢?

我们转化一下刚才的问题,

“当前的决策会受到之前决策的影响”

换句话说,就是当前的决策会影响之后的决策

也就是,现在的时刻会影响之后转移时的物品价值

考虑每次决策时,就把之后的代价先算进去

设 wi,jw_{i,j}wi,j​ 表示区间 [i,j][i,j][i,j] 对之后决策造成的影响(代价),不难发现
wi,j=∑i=0nvi−∑k=ijvkw_{i,j} = \sum_{i=0}^{n}v_i - \sum_{k=i}^{j}v_k wi,j​=i=0∑n​vi​−k=i∑j​vk​
显然可以前缀和优化

当然最重要的是,我们可以很容易地推出转移方程了
f0,i,j=min⁡{f0,i+1,j+(xi+1−xi)×(Si+Sn−Sj),f1,i+1,j+(xj−xi)×(Si+Sn−Sj)}f1,i,j=min⁡{f0,i,j−1+(xj−xi)×(Si−1+Sn−Sj−1),f1,i,j−1+(xj−xj−1)×(Si−1+Sn−S−j−1)}f_{0,i,j}=\min\left\{f_{0,i+1,j}+(x_{i+1}-x_i)\times(S_i+S_n-S_j),f_{1,i+1,j}+(x_j-x_i)\times(S_i+S_n-S_j)\right\} \\f_{1,i,j}=\min\left\{f_{0,i,j-1}+(x_j-x_i)\times(S_{i-1}+S_n-S_{j-1}), f_{1,i,j-1}+(x_j-x_{j-1})\times(S_{i-1}+S_n-S-{j-1})\right\} f0,i,j​=min{f0,i+1,j​+(xi+1​−xi​)×(Si​+Sn​−Sj​),f1,i+1,j​+(xj​−xi​)×(Si​+Sn​−Sj​)}f1,i,j​=min{f0,i,j−1​+(xj​−xi​)×(Si−1​+Sn​−Sj−1​),f1,i,j−1​+(xj​−xj−1​)×(Si−1​+Sn​−S−j−1)}
其中 Sk=∑i=1kvkS_k = \sum_{i=1}^{k}v_kSk​=∑i=1k​vk​

时间复杂度 O(n2)O(n^2)O(n2)

答案就是 ∑yi−min⁡{f0,1,n,f1,1,n}\sum y_i -\min\left\{f_{0,1,n},f_{1,1,n}\right\}∑yi​−min{f0,1,n​,f1,1,n​}

代码:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <iomanip>
using namespace std;
#define int long long
#define INF 0x3f3f3f3f3f3f3f3f
#define N (int)(1e3+15)int n,x0,f0[N][N],f1[N][N];
struct node{int x,y,v;}a[N];
signed main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);// freopen("check.in","r",stdin);// freopen("check.out","w",stdout);cin >> n >> x0;for(int i=1; i<=n; i++) cin >> a[i].x;for(int i=1; i<=n; i++) cin >> a[i].y;for(int i=1; i<=n; i++) cin >> a[i].v;a[++n].x=x0;sort(a+1,a+1+n,[](node a,node b){return a.x<b.x;});memset(f0,0x3f,sizeof(f0));memset(f1,0x3f,sizeof(f1));for(int i=1; i<=n; i++)if(a[i].x==x0){f0[i][i]=f1[i][i]=0;}for(int i=1; i<=n; i++) a[i].v+=a[i-1].v;for(int len=2; len<=n; len++)for(int i=1,j=i+len-1; j<=n; i++,j++){f0[i][j]=min(f0[i+1][j]+(a[i+1].x-a[i].x)*(a[i].v+a[n].v-a[j].v),f1[i+1][j]+(a[j].x-a[i].x)*(a[i].v+a[n].v-a[j].v));f1[i][j]=min(f0[i][j-1]+(a[j].x-a[i].x)*(a[i-1].v+a[n].v-a[j-1].v),f1[i][j-1]+(a[j].x-a[j-1].x)*(a[i-1].v+a[n].v-a[j-1].v));}int sum=0;for(int i=1; i<=n; i++) sum+=a[i].y;cout << fixed << setprecision(3);cout << ((sum-min(f0[1][n],f1[1][n]))/1000.0) << '\n';return 0;
}

参考文献

[1] https://www.luogu.com.cn/blog/Bartholomew/solution-p2466

转载请说明出处

洛谷P2466 [SDOI2008] Sue 的小球 题解相关推荐

  1. [SDOI2008]SUE的小球

    [SDOI2008]SUE的小球 文章目录 题目描述 题解: 代码: 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Form ...

  2. 洛谷P5520 [yLOI2019] 青原樱 题解

    洛谷P5520 [yLOI2019] 青原樱 题解 题目链接:P5520 [yLOI2019] 青原樱 题意: n n n 个空放 m m m 个物品,两两物品不能直接相邻,至少空一格 纯数学题. 看 ...

  3. 洛谷P5633 最小度限制生成树 题解

    洛谷P5633 最小度限制生成树 题解 题目链接:P5633 最小度限制生成树 题意: 给你一个有 n n n 个节点, m m m 条边的带权无向图,你需要求得一个生成树,使边权总和最小,且满足编号 ...

  4. 洛谷P2619 [国家集训队]Tree I 题解

    洛谷P2619 [国家集训队]Tree I 题解 题目链接:P2619 [国家集训队]Tree I 题意: 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有 need\text{n ...

  5. 洛谷P1282 多米诺骨牌 题解

    洛谷P1282 多米诺骨牌 题解 题目链接:P1282 多米诺骨牌 题意: 多米诺骨牌由上下 222 个方块组成,每个方块中有 1∼61\sim61∼6 个点.现有排成行的上方块中点数之和记为 S1S ...

  6. 洛谷P4084 [USACO17DEC]Barn Painting G 题解

    洛谷P4084 [USACO17DEC]Barn Painting G 题解 题目链接:P4084 [USACO17DEC]Barn Painting G 题意:题意:给定一颗N个节点组成的树,3种颜 ...

  7. 洛谷P3237 [HNOI2014]米特运输 题解

    洛谷P3237 [HNOI2014]米特运输 题解 题目链接:P3237 [HNOI2014]米特运输 题意: 这题面是真的长啊 qwq 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为 ...

  8. 洛谷P4315 月下“毛景树” 题解

    洛谷P4315 月下"毛景树" 题解 题目链接:P4315 月下"毛景树" 题意:请维护一个数据结构,支持 改第 kkk 条边的边权 结点 uuu 到 vvv ...

  9. 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)

    洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...

  10. 洛谷P4287 [SHOI2011]双倍回文 题解

    洛谷P4287 [SHOI2011]双倍回文 题解 题目链接:P4287 [SHOI2011]双倍回文 题意: 记字符串 www 的倒置为 wRw^RwR .例如 (abcd)R=dcba(\tt{a ...

最新文章

  1. JS 创建对象(常见的几种方法)
  2. key设计 短信验证存redis_Redis存储Key的一种设计实现方式:模式匹配
  3. 【机器学习基础】让人惊艳的决策树可视化
  4. [JavaWeb-JavaScript]JavaScript_Array数组对象
  5. IT男的”幸福”生活续8
  6. $Django 聚合函数、分组查询、F,Q查询、orm字段以及参数
  7. ios html异步加载图片,iOS 异步加载本地图片
  8. pyplot设置刻度字体大小以及标签字体大小
  9. 基于频繁增长树(FP-树)的频繁项集挖掘算法实现
  10. 数据库系统基础教程一:关系数据库与关系代数
  11. 公司内部项目章程模板
  12. OpenCV.js 快速入门指南
  13. 双极型晶体管及其放大电路
  14. linux搭建服务器有什么用处,Linux配置dns服务器作用是什么?
  15. fullcalendar 课程表 js 插件 日程安排操作 js
  16. c语言求出现次数最多的字符,保证你看懂
  17. 已解决for example: not eligible for auto-proxying
  18. Java 反射 - Java 访问器
  19. 计算机毕业设计(附源码)python租房管理信息系统
  20. 简易教程丨AdsPower快速配置阿里云服务器IP

热门文章

  1. c语言模拟洪泛路由算法,[Angular, TypeScript, 路由算法] 模拟IP层路由协议,实现LS算法、洪泛算法、DV算法、路由毒化...
  2. 网络攻防“三剑客”正式加盟墨者安全 担任首席安全顾问...
  3. 如何在微信小程序中使用iconfont 1
  4. 【一步一步教会您升级到win7旗舰版】
  5. 网易云解锁配置(windows)
  6. 2022快速计算机视觉EI国际会议汇总
  7. 【2016.11.28】纯HTML仿微博注册页面
  8. 智能客服在2022:从成本中心奔向价值中心
  9. java 均值方差 计算器_方差均值计算器
  10. Github开源项目总结