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的目标并不是当一个海盗,而是要收集空中漂浮的彩 ...
随机推荐
- 两种实现光标点插入range
一.insertNode <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- Django—XSS及CSRF
一.XSS 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击者往W ...
- 属性只有一个值的这类 html 属性是怎么回事,该如何设置值;比如:checked = “checked” vs checked = true
参考链接:https://stackoverflow.com/questions/10650233/checked-checked-vs-checked-true 问: What is the dif ...
- lodash常用函数 - Array、Collection
lodash常用函数 - Array.Collection lodash版本 v3.10.1 1.Array.Collection pull 移除数组中满足条件的元素 var array = [1, ...
- Excel 函数使用
字符串 20180613 转为日期 2018-06-13,单元格内输入如下公式 =DATE(LEFT(),MID(,),RIGHT()) IF 函数内的或.与 =IF(AND(A=B,C=D),&q ...
- skype for business server 2015 报错“不可用:试图检查架构状态时发生故障,请确保能够访问Active Direcotry”
报错“不可用:试图检查架构状态时发生故障,请确保能够访问Active Direcotry” 遇到错误后就上网查询了下,有的人说用下面方法解决了 用域的administrator 登入就可以了(之前是用 ...
- 纯CSS画的基本图形
图形包括基本的矩形.圆形.椭圆.三角形.多边形,也包括稍微复杂一点的爱心.钻石.阴阳八卦等.当然有一些需要用到CSS3的属性,所以在你打开这篇文章的时候,我希望你用的是firefox或者chrome, ...
- XISE菜刀V13.0 官网版 XISE菜刀VIP破解版 XISE官网
诠释: 1. 破解VIP登陆限制 2.去后门 (自查) 下载地址 :https://pan.baidu.com/s/1eR2rUOM 查毒地址:http://a.virscan.org/a3983f3 ...
- 记录linux查询命令的一个网站
http://man.linuxde.net/ 另外下面是对常用命令的总结 https://www.cnblogs.com/soyxiaobi/p/9717483.html
- UIView的多重属性
1)几何属性: 2)位图属性: