2037: [Sdoi2008]Sue的小球

Time Limit: 10 Sec  Memory Limit: 64 MB
Submit: 530  Solved: 282
[Submit][Status][Discuss]

Description

Sue和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船。然而,Sue的目标并不是当一个海盗,而是要收集空中漂浮的彩蛋,Sue有一个秘密武器,只要她将小船划到一个彩蛋的正下方,然后使用秘密武器便可以在瞬间收集到这个彩蛋。然而,彩蛋有一个魅力值,这个魅力值会随着彩蛋在空中降落的时间而降低,Sue要想得到更多的分数,必须尽量在魅力值高的时候收集这个彩蛋,而如果一个彩蛋掉入海中,它的魅力值将会变成一个负数,但这并不影响Sue的兴趣,因为每一个彩蛋都是不同的,Sue希望收集到所有的彩蛋。 然而Sandy就没有Sue那么浪漫了,Sandy希望得到尽可能多的分数,为了解决这个问题,他先将这个游戏抽象成了如下模型: 以Sue的初始位置所在水平面作为x轴。 一开始空中有N个彩蛋,对于第i个彩蛋,他的初始位置用整数坐标(xi, yi)表示,游戏开始后,它匀速沿y轴负方向下落,速度为vi单位距离/单位时间。Sue的初始位置为(x0, 0),Sue可以沿x轴的正方向或负方向移动,Sue的移动速度是1单位距离/单位时间,使用秘密武器得到一个彩蛋是瞬间的,得分为当前彩蛋的y坐标的千分之一。 现在,Sue和Sandy请你来帮忙,为了满足Sue和Sandy各自的目标,你决定在收集到所有彩蛋的基础上,得到的分数最高。

Input

第一行为两个整数N, x0用一个空格分隔,表示彩蛋个数与Sue的初始位置。 第二行为N个整数xi,每两个数用一个空格分隔,第i个数表示第i个彩蛋的初始横坐标。 第三行为N个整数yi,每两个数用一个空格分隔,第i个数表示第i个彩蛋的初始纵坐标。 第四行为N个整数vi,每两个数用一个空格分隔,第i个数表示第i个彩蛋匀速沿y轴负方向下落的的速度。

Output

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

Sample Input

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

Sample Output

0.000

数据范围:
N < = 1000,对于100%的数据。 -10^4 < = xi,yi,vi < = 10^4

难点和重点就在于每次移动都要把未来会减少的得分计算进来,具体解题思想可以看这篇论文,说的非常好:http://wenku.baidu.com/view/83d0a76925c52cc58bd6bea8
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <algorithm>
#define FOR(i, x, y) for(int i=x;i<=y;i++)
#define LL long long
using namespace std;
const int MAXN = 1000 + 10;
struct Point
{double x, y, v;bool operator < (const Point& rhs)const{return x < rhs.x;}
}p[MAXN];
int n;
double x0, dp[MAXN][MAXN][2], sum[MAXN];;
int main()
{scanf("%d%lf", &n, &x0);FOR(i, 1, n) scanf("%lf", &p[i].x);FOR(i, 1, n) scanf("%lf", &p[i].y);FOR(i, 1, n) scanf("%lf", &p[i].v);sort(p + 1, p + 1 + n);for(int i=1;i<=n;i++) sum[i] = sum[i-1] + p[i].v;FOR(i, 1, n) dp[i][i][0] = dp[i][i][1] = p[i].y - sum[n] * abs(p[i].x - x0);for(int len=2;len<=n;len++){for(int i=1;i<=n-len+1;i++){int j = i + len - 1;dp[i][j][0] = max(dp[i+1][j][0] + p[i].y - abs(p[i].x - p[i+1].x) * (sum[i] + sum[n] - sum[j]),dp[i+1][j][1] + p[i].y - abs(p[i].x - p[j].x) * (sum[i] + sum[n] - sum[j]));dp[i][j][1] = max(dp[i][j-1][0] + p[j].y - abs(p[j].x - p[i].x) * (sum[i-1] + sum[n] - sum[j-1]),dp[i][j-1][1] + p[j].y - abs(p[j].x - p[j-1].x) * (sum[i-1] + sum[n] - sum[j-1]));}}printf("%.3lf\n", (1.0 * max(dp[1][n][0], dp[1][n][1]) )/ 1000.0);return 0;
}

BZOJ 2037: [Sdoi2008]Sue的小球(DP)相关推荐

  1. [SDOI2008]SUE的小球

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

  2. BZOJ 1867 [Noi1999]钉子和小球 DP

    想状态和钉子的位置如何匹配想了半天...后来发现不是一样的吗$qwq$ 思路:当然是$DP$啦 提交:>5次(以为无故$RE$,实则是先乘后除爆了$long\space long$) 题解: 若 ...

  3. Bzoj2037: [Sdoi2008]Sue的小球

    题面 传送门 Sol 就相当于从\(x_0\)开始左右横走,显然可以设\(f[0/1][i][j]\)表示左到\(i\)右到\(j\),当前在左/右的代价 但是不好记转移代价,因为不知道时间 那么可以 ...

  4. BZOJ 2037 Sue的小球

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2037 题意:二维平面上有一些彩蛋(x,y),每个彩蛋会下落.当移动到彩蛋下方时会获得彩蛋 ...

  5. BZOJ.3227.[SDOI2008]红黑树tree(树形DP 思路)

    BZOJ orz MilkyWay天天做sxt! 首先可以树形DP:\(f[i][j][0/1]\)表示\(i\)个点的子树中,黑高度为\(j\),根节点为红/黑节点的最小红节点数(最大同理). 转移 ...

  6. BZOJ 2131 免费的馅饼(DP,二维偏序问题 / 旋转坐标轴转化问题)【BZOJ 修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2131 是 hydro 的 BZOJ ...

  7. BZOJ.1109.[POI2007]堆积木Klo(DP LIS)

    BZOJ 二维\(DP\)显然.尝试换成一维,令\(f[i]\)表示,强制把\(i\)放到\(a_i\)位置去,现在能匹配的最多数目. 那么\(f[i]=\max\{f[j]\}+1\),其中\(j& ...

  8. BZOJ.1032.[JSOI2007]祖码(区间DP)

    题目链接 BZOJ 洛谷 AC代码: 区间DP,f[i][j]表示消掉i~j需要的最少珠子数. 先把相邻的相同颜色的珠子合并起来. 枚举方法一样,处理一下端点可以碰撞消除的情况就行. 当然合并会出现问 ...

  9. 【BZOJ - 4318】OSU!(概率dp,数学期望,期望的线性性)

    题干: osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的01串. ...

  10. BZOJ 1003[ZJOI2006]物流运输(SPFA+DP)

    Problem 1003. -- [ZJOI2006]物流运输 1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MB Submit ...

最新文章

  1. 小程序clearinterval无效解决
  2. Eclipse中导入第三方源码的问题和备用解决方案
  3. python使用pip安装本地包-Python之pip使用详解|附第三方库安装总结
  4. Atom中安装atom-terminal插件来打开命令行运行vue项目
  5. 周五话运营 | 做个了解用户的精细化运营喵
  6. suse linux10 关闭防火墙,Suse10 关闭防火墙
  7. 秒懂 QPS、TPS、PV、UV、GMV、IP、RPS!
  8. python指针引用的区别_C++基础:指针和引用的区别
  9. 【牛客 - 1080C】tokitsukaze and Soldier(思维,偏序问题)
  10. Unity AssetBundle 爬坑手记
  11. linux笔记:shell编程-正则表达式
  12. SAI:Switch Abstraction Interface
  13. Unity3d学习之路-初识GameSparks多人游戏插件
  14. VxWorks Fuzzing 之道:VxWorks 工控实时操作系统漏洞挖掘调试与利用揭秘
  15. python生成词云图、特殊图形_Python模块---Wordcloud生成词云图
  16. 什么是漏极开路【转】
  17. Opencv求取连通区域重心
  18. windows操作系统杂谈
  19. 自动动态调整广告出价OCPC
  20. nc服务器修改过ip地址,nc服务器修改过ip地址

热门文章

  1. 基于 Win32 的应用程序
  2. 大一上:计算机导论复习(每章分值、常考题型以及部分章节课后习题答案【网上没有,老师自己做的】)
  3. allegro怎么修改文本_allegro user preferences常见设置及说明
  4. 2021年安全生产模拟考试(全国特种作业操作证电工作业-防爆电气模拟考试题库一)安考星
  5. windows电脑如何设置定时关机?电脑设置定时关机的方法
  6. echart表格颜色设置
  7. 【Linux】 - Linux中查看命令文档的命令
  8. 马蹄声袭来,犹见青衣织桃花伞,断送了情执
  9. HTTP hijack
  10. 淘宝在线客服为什么回复那么慢