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 ...
随机推荐
- jsp验证码 (通过单击验证码或超链接换验证码)
#code.jsp <%@ page language="java" import="java.util.*" import="java.awt ...
- mysql C API 字符串玩转备份调优
- 沙湖王 | 用K-均值聚类给女明星们的身材分分类
沙湖王 | 用K-均值聚类给女明星们的身材分分类 http://www.shahuwang.com/2012/07/21/%E7%94%A8scipy%E5%AE%9E%E7%8E%B0k-means ...
- poj 3262 Protecting the Flowers 贪心
题意:给定n个奶牛,FJ把奶牛i从其位置送回牛棚并回到草坪要花费2*t[i]时间,同时留在草地上的奶牛j每分钟会消耗d[j]个草 求把所有奶牛送回牛棚内,所消耗草的最小值 思路:贪心,假设奶牛a和奶牛 ...
- codevs 1001 舒适的路线 (并查集)
题目描述 Description Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光. Z小镇附近共有 N(<N≤)个景点(编号为1,,,…,N),这些景点被M(<M≤)条道路连 ...
- pyqt QTimer,QThread例子学习
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' from PyQt4.QtGui import * from PyQ ...
- 男同胞爱小秘籍--作为爱他的女朋友了几天C规划
各位男同胞,不知道你的女朋友没有在过去的一问天,你这个问题~~ 场景重现: 女友:"今天天气不错." 你们:"对" 女友:"今天是我们知道它的最初几天 ...
- asp.net MVC 学习笔记
1.可以看出每个区域Areas里都是个mini的MVC项目,Controller.Models.Views一个都不缺,还多了一个AdminAreaRegistration类 2.MVC 将URL映射到 ...
- JavaScript自我学习之解析与执行
如果想要学好JavaScript那么我们首先必须要知道浏览器JavaScript引擎是如何解释执行JavaScript代码的,作为一名菜鸟,从自己学习JavaScript的过程来说,真心觉得不了解这些 ...
- HTML5 本地裁剪图片并上传至服务器(转)
很多情况下用户上传的图片都需要经过裁剪,比如头像啊什么的.但以前实现这类需求都很复杂,往往需要先把图片上传到服务器,然后返回给用户,让用户确定裁剪坐标,发送给服务器,服务器裁剪完再返回给用户,来回需要 ...