UESTC_酱神赏花 2015 UESTC Training for Dynamic Programming<Problem C>
C - 酱神赏花
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 262143/262143KB (Java/Others)
酱神去杭州赏花。
花展在一条街道上举行,这条街道上有一共有n个节点,自左而右从1到n编号,1号和n号是左右两个端点,两个相邻端点之间的距离为1.本次花展一共要展出m朵花,在第ti时刻,有一朵颜值为bi的花将在第ai个节点展出,如果酱神在ti时刻处于第x个节点,那么他能获得的开心值为bi−|x−ai|,注意这个值可能为负。
在t=1的时刻,酱神可以随意从1到n选出一个节点作为赏花的起点。在接下来的每个单位时间段中,酱神最多能移动d的距离。酱神每秒只能移动整数个距离,且任何时刻不能超出街道的范围。
他能获得的最大开心值为多少?
Input
第一行3个数n,m,d。
接下来m行,每行3个数ai,bi,ti。
1≤n≤105,1≤m≤100
1≤ai≤n
1≤bi≤109
1≤ti≤109
1≤d≤109
Output
输出一个数,酱神的最大开心值。
Sample input and output
Sample Input | Sample Output |
---|---|
30 4 2 |
-3 |
解题思路:
我们令f( i , j ) -> 目前第 j 朵花开,酱神正在坐标点 i 的最小花费.
我们考虑转移
F ( i , j ) = min ( F( u , j - 1) – abs( i – u ) ) + B[j]
不妨令 i > u
有
F( i ,j ) = min ( F( u , j – 1 ) ) + B[j] + u – i;
当i < u时同理
这样
我们维护一个单调队列即可,正反跑两遍即可.
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath> typedef long long ll;
using namespace std;
const int maxn = 1e5 + ;
ll f[maxn][];
int cur = , q[maxn];
ll n,m,d; typedef struct flower
{
ll a,b,t;
friend bool operator < (const flower & x,const flower & y)
{
return x.t < y.t;
}
}; flower A[+]; void init_f()
{
for(int i = ; i <= n ; ++ i)
f[i][cur] = -;
} int main(int argc,char *argv[])
{
scanf("%d%d%d",&n,&m,&d);
for(int i = ; i <= m ; ++ i)
scanf("%d%d%d",&A[i].a,&A[i].b,&A[i].t);
sort(A+,A++m);
for(int i = ; i <= n ; ++ i)
f[i][cur] = A[].b - abs(i - A[].a);
for(int j = ; j <= m ; ++ j)
{
ll limit = (A[j].t - A[j-].t)*d;
cur ^= ;
int front = , rear = ;
init_f();
for(int i = ; i <= n ; ++ i)
{
while(rear > front && f[i][cur^] >= f[q[rear-]][cur^])
rear--;
q[rear++] = i;
while(rear > front && (i - q[front]) > limit)
front++;
f[i][cur] = max(f[i][cur],f[q[front]][cur^] + A[j].b - abs(i - A[j].a));
}
front = , rear = ;
for(int i = n ; i >= ; -- i)
{
while(rear > front && f[i][cur^] >= f[q[rear-]][cur^])
rear--;
q[rear++] = i;
while(rear > front && (q[front] - i) > limit)
front++;
f[i][cur] = max(f[i][cur],f[q[front]][cur^] + A[j].b - abs(i - A[j].a));
}
}
ll ans = -;
for(int i = ; i <= n ; ++ i)
ans = max(ans,f[i][cur]);
printf("%lld\n",ans);
return ;
}
UESTC_酱神赏花 2015 UESTC Training for Dynamic Programming<Problem C>的更多相关文章
- UESTC_酱神的旅行 2015 UESTC Training for Dynamic Programming<Problem M>
M - 酱神的旅行 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- UESTC_男神的约会 2015 UESTC Training for Dynamic Programming<Problem J>
J - 男神的约会 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- UESTC_男神的礼物 2015 UESTC Training for Dynamic Programming<Problem A>
A - 男神的礼物 Time Limit: 3000/3000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- UESTC_邱老师选妹子 2015 UESTC Training for Dynamic Programming<Problem H>
H - 邱老师选妹子 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC_邱老师看电影 2015 UESTC Training for Dynamic Programming<Problem F>
F - 邱老师看电影 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC_邱老师玩游戏 2015 UESTC Training for Dynamic Programming<Problem G>
G - 邱老师玩游戏 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC_酱神寻宝 2015 UESTC Training for Dynamic Programming<Problem O>
O - 酱神寻宝 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- UESTC_邱老师选妹子(二) 2015 UESTC Training for Dynamic Programming<Problem I>
I - 邱老师选妹子(二) Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Su ...
- UESTC_最少花费 2015 UESTC Training for Dynamic Programming<Problem D>
D - 最少花费 Time Limit: 30000/10000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
随机推荐
- Spring MVC基础
1.Web MVC基础 MVC的本质是表现层模式,我们以视图模型为中心,将视图和控制器分离出来.就如同分层模式一样,我们以业务逻辑为中心,把表现层和数据访问层代码分离出来是一样的方法.框架只能在技术层 ...
- js jquery 验证写法
<?php header("Content-type: text/html; charset=utf-8"); ?> <script src="jque ...
- c++之 常用类型
C/C++常用类型的范围 C/C++里常用的类型及表示范围如下表所示: 类型 sizeof 表示范围 说明 char 1 -128 - 127 -2^7 - (2^7 - 1) short 2 -32 ...
- Java 5 的新标准语法和用法详解集锦
Java 5 的新标准语法和用法详解集锦 Java 5 的新标准语法和用法详解集锦 (需要在首选项-java-complier-compiler compliance level中设置为java5.0 ...
- Python模块学习笔记— —time与datatime
Python提供了多个内置模块用于操作日期时间.像calendar,time,datetime.首先对time模块中最经常使用的几个函数作一个介绍,它提供的接口与C标准库time.h基本一致.然后再介 ...
- 前端JS模版库kino.razor - 原理流程分析 - 改进版轮子RazorJs
1.前言 从后台获取数据,在前端JS里面拼接字符串,不累吗?敢不敢找一款前端使使... 现在这种模板库比较多了,我用过的jquery-template .JsRender .听说过的一堆,还有各种MV ...
- JS数组追加数组采用push.apply的坑(转)
JS数组追加数组没有现成的函数,这么多年我已经习惯了a.push.apply(a, b);这种自以为很酷的,不需要写for循环的写法,一直也没遇到什么问题,直到今天我要append的b是个很大的数组时 ...
- jquery模拟checkbox效果,以及background-size在jquery中的使用。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- 限制oracle用户创建、删除、修改用户对象
在sys用户下执行: CREATE OR REPLACE TRIGGER lms2014BEFORE create or DROP OR ALTER ON databaseDECLAREBEGINIF ...
- web前端中实现多标签页切换的效果
在这里,实现多标签页效果的方法有两个,一个是基于DOM的,另一个是基于jquery的,此次我写的是一个对于一个电话套餐的不同,显示不同的标签页 方法一: 首先,我们要把页面的大体框架和样式写出来,ht ...