BZOJ2037: [Sdoi2008]Sue的小球(区间DP)
Time Limit: 10 Sec Memory Limit: 64 MB
Submit: 869 Solved: 483
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
-4 -2 2
22 30 26
1 9 8
Sample Output
数据范围:
N < = 1000,对于100%的数据。 -10^4 < = xi,yi,vi < = 10^4
HINT
Source
很不错的一道题目
如果我们按正常的DP思路去做的话,不管怎样都需要把时间加到状态里面。
但是这样肯定TLE + MLE
我们考虑消除时间这一维,通过观察不难发现,Sandy走过的路线一定是一段连续的区间,
因此我们考虑用$f[i][j]$表示这一段区间都被选的最大答案
但是这样我们无法表示它当前的位置,
稍加观察不难发现,Sandy拿完这一段区间,一定是在左/右端点,我们把位置加入到状态里面
用$f[i][j][0/1]$分别表示拿了$[i,j]$这段区间后在左边/右边的最大答案
那么转移的时候只需要考虑从哪里转移而来就可以了,
每走一步的损失可以通过前缀和做到$O(1)$查询
#include<cstdio>
#include<algorithm>
#include<cstring>
const int MAXN = ;
inline int read() {
char c = getchar(); int x = , f = ;
while(c < '' || c > '') {if(c == '-') f = -; c = getchar();}
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * f;
}
int N, X0;
struct Node {
double x, y, v;
bool operator < (const Node &rhs) const{
return x < rhs.x;
}
}a[MAXN];
double sum[MAXN], w[MAXN][MAXN], f[][MAXN][MAXN];
double dis(int x, int y) {
return a[y].x - a[x].x;
}
double Query(int x, int y) {
if(x < ) return sum[N] - sum[y];
return sum[N] - sum[y] + sum[x];
}
int main() {
#ifdef WIN32
freopen("a.in", "r", stdin);
#endif
N = read();
a[] = (Node) {X0 = read(), , };
for(int i = ;i <= N; i++) a[i].x = read();
for(int i = ; i <= N; i++) a[i].y = read();
for(int i = ; i <= N; i++) a[i].v = read(); std::sort(a, a + N + ); sum[] = a[].v;
for(int i = ; i <= N; i++) sum[i] = sum[i - ] + a[i].v; memset(f, -0x3f, sizeof(f));
for(int i = ; i <= N; i++)
if(a[i].x == X0)
f[][i][i] = f[][i][i] = ; for(int len = ; len <= N; len++) {
for(int i = ; i + len <= N; i++) {
int j = i + len;
f[][i][j] = std::max(f[][i + ][j] + a[i].y - dis(i, i + ) * Query(i, j),
f[][i + ][j] + a[i].y - dis(i, j) * Query(i, j));
f[][i][j] = std::max(f[][i][j - ] + a[j].y - dis(i, j) * Query(i - , j - ),
f[][i][j - ] + a[j].y - dis(j - , j) * Query(i - , j - ));
// printf("%.3lf %.3lf\n", f[0][i][j], f[1][i][j]);
}
}
printf("%.3lf", std::max(f[][][N], f[][][N]) / );
return ;
}
BZOJ2037: [Sdoi2008]Sue的小球(区间DP)的更多相关文章
- 【BZOJ2037】[Sdoi2008]Sue的小球 区间DP+费用提前
[BZOJ2037][Sdoi2008]Sue的小球 Description Sue和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船.然而 ...
- [luogu2446][bzoj2037][SDOI2008]Sue的小球【区间DP】
分析 简单区间DP, 定义状态f[i][j][0/1]为取完i-j的小球最后取i/j上的小球所能获得的最大价值. 排序转移. ac代码 #include <bits/stdc++.h> # ...
- BZOJ2037: [Sdoi2008]Sue的小球
Description Sue 和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船.然而,Sue的目标并不是当一个海 盗,而是要收集空中漂浮 ...
- 2037: [Sdoi2008]Sue的小球
2037: [Sdoi2008]Sue的小球 链接 题解 论文 代码 #include<cstdio> #include<algorithm> #include<cstr ...
- 【BZOJ2037】Sue的小球(动态规划)
[BZOJ2037]Sue的小球(动态规划) 题面 BZOJ 题解 莫名想到这道题目 很明显是一样的 设\(f[i][j][0/1]\)表示已经接到了\(i-j\)这一段的小球 当前在\(i\)或者在 ...
- [SDOI2008]Sue的小球
题目描述 Sue和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船.然而,Sue的目标并不是当一个海盗,而是要收集空中漂浮的彩蛋,Sue有一 ...
- Luogu[SDOI2008]Sue的小球
题目描述 Sue和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船.然而,Sue的目标并不是当一个海盗,而是要收集空中漂浮的彩蛋,Sue有一 ...
- 【简●解】[SDOI2008] Sue的小球
[简●解][SDOI2008] Sue的小球 计划着刷\(DP\)题结果碰到了这样一道论文题,幸好不是太难. [题目大意] 口水话有点多,所以就直接放链接.传送门 [分析] 看到题首先联想到了曾经做过 ...
- bzoj 2037: [Sdoi2008]Sue的小球——dp
Description Sue和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船.然而,Sue的目标并不是当一个海盗,而是要收集空中漂浮的彩 ...
随机推荐
- Flex和MyEclipse10整合时候需要注意的问题
1.myeclipse和flex的位数要一致,不能混着安装 2.独立安装完Adobe Flash Builder 4.6 Installer之后,在其的安装文件夹下有一个utilities文件夹下有一 ...
- Linux基础之-Bash命令优先级
一. Bash简介 命令解释器,也就是 Bourne Again Shell,起源于shell.shell俗称壳,它是指UNIX系统下的一个命令解析器:主要用于用户和系统的交互.UNIX系统上有很多种 ...
- Java 开源博客 Solo 1.4.0 发布 - 简化
Solo 1.4.0 正式发布了!这个版本主要是简化了配置项,修复了一些缺陷并改进了很多细节体验,感谢一直以来关注和支持我们的朋友! 只需一个命令即可启动(不需要安装数据库.部署容器):也可以通过 w ...
- OGC 的 WMS、WFS 及WCS服务(转)
OGC——Open Geospatial Consortium——开放地理信息联盟,是一个非盈利的志愿的国际标准化组织,引领着空间地理信息标准及定位基本服务的发展目前在空间数据互操作领域,基于公共接口 ...
- MySQL数据库(2)----检索信息
SELECT 语句的简化语法如下: SELECT what to retrive FROM table or tables WHERE conditions that data must satisf ...
- python(day1-11)
day1:Python入门 day2:数字类型字符编码 day3:函数 day4:模块与包 day5:常用模块 day6:面向对象 day8:异常处理 day9:网络编程 day10:并发编程 day ...
- lsqnonlin函数使用方法
非线性最小二乘函数 lsqnonlin 格式x = lsqnonlin(fun,x0) %x0 为初始解向量:fun为,i=1,2,-,m,fun返回向量值F,而不是平方和值,平方和隐含在方法中, ...
- Linux的inode的理解 ZZ
文件名 -> inode -> device block 转自:http://www.ruanyifeng.com/blog/2011/12/inode.htmlhttp://blog.s ...
- 记一次insert因为db file sequential read影响性能导致性能原因的分析
通过详细的10046 trace发现,大量的io等待分布在以下数据文件上:Misses in library cache during parse: 0Elapsed times include wa ...
- NET(C#):使用HttpWebRequest头中的Range下载文件片段
转自:http://www.mgenware.com/blog/?p=220 HTTP请求包头信息中有一个Range属性可以指定索取部分HTTP请求的文件.在.NET中则通过HttpWebReques ...