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的目标并不是当一个海盗,而是要收集空中漂浮的彩 ...
随机推荐
- RxJava 中的map与flatMap
1.map和flatMap都是接受一个函数作为参数(Func1) 2.map函数只有一个参数,参数一般是Func1,Func1的<I,O>I,O模版分别为输入和输出值的类型,实现Func1 ...
- php模拟post提交
<?php $url = "xxxxx"; // 用户名 $loginName = ''; // 密码 $pwd = ''; // service $serviceName ...
- mac和windows自动清理内存工具
因为我比较懒,所以需要一款能自动清理电脑内存的工具,目的是设置内存最小值,然后自动清理. mac: drcleaner windows: MaxMem win10设置开机启动地址:C:\Program ...
- 【Leetcode】【Medium】Generate Parentheses
Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...
- Mysql学习---SQL测试题之表结构
创建表结果和数据准备[直接执行即可] /* Navicat MySQL Data Transfer Source Server : ftl1012 Source Server Version : 50 ...
- Oracle数据库设计实例-实时生产效率系统数据库设计
Oracle数据库设计实例-实时生产效率系统数据库设计 引言 1.1 设计前提 某部门经理要求IT部门设计一个流水线实时生产效率系统,用来统计实时的生产量和效率.流水线有数百条,实时间隔为1min. ...
- TIAGO机器人传感器参数简介 手册翻译
本来认为这篇文章是最没人气的,竟然收到了回复,看来要继续更新本文了.留下笔者联系方式,邮箱leop22@163.com,欢迎邮件交流. 防止不良爬虫,原文链接:http://www.cnblogs.c ...
- [EffectiveC++]item39:明智而审慎地使用private
187页 private继承意味implementedin-terms-of(根据某物实现出).如果你让class D以private形式继承class B,你的用意为了采用class B内已经备妥的 ...
- 一直在用的一个javascript网站
http://www.dottoro.com/ 很不错,例子丰富,解释详细,全面:非常好的参考资料站.
- Java 中的引用
JVM 是根据可达性分析算法找出需要回收的对象,判断对象的存活状态都和引用有关. 在 JDK1.2 之前这点设计的非常简单:一个对象的状态只有引用和没被引用两种区别. 这样的划分对垃圾回收不是很友好, ...