酱神赏花

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 262143/262143KB (Java/Others)
Submit Status

酱神去杭州赏花。

花展在一条街道上举行,这条街道上有一共有n个节点,自左而右从11到nn编号,11号和nn号是左右两个端点,两个相邻端点之间的距离为11.本次花展一共要展出mm朵花,在第titi时刻,有一朵颜值为bibi的花将在第aiai个节点展出,如果酱神在titi时刻处于第xx个节点,那么他能获得的开心值为bi−|x−ai|bi−|x−ai|,注意这个值可能为负。

在t=1t=1的时刻,酱神可以随意从11到nn选出一个节点作为赏花的起点。在接下来的每个单位时间段中,酱神最多能移动dd的距离。酱神每秒只能移动整数个距离,且任何时刻不能超出街道的范围。

他能获得的最大开心值为多少?

Input

第一行33个数n,m,dn,m,d。

接下来mm行,每行33个数ai,bi,tiai,bi,ti。

1≤n≤1051≤n≤105,1≤m≤1001≤m≤100

1≤ai≤n1≤ai≤n

1≤bi≤1091≤bi≤109

1≤ti≤1091≤ti≤109

1≤d≤1091≤d≤109

Output

输出一个数,酱神的最大开心值。

Sample input and output

Sample Input Sample Output
30 4 2
27 3 1
11 4 1
11 4 1
1 2 20
-3

Source

2015 UESTC Training for Dynamic Programming
题意:在数轴上有1-n的n个点,共有m多花要开放,每次会在ti时刻在ai位置开出一朵颜值为bi的花
假如花开时你在x处,那么你得到的颜值是bi-(ai-x),你单位时间移动的速度为d,为你能获得的最大颜值。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <algorithm>
#include <set>
using namespace std;
typedef long long ll;
typedef unsigned long long Ull;
#define MM(a,b) memset(a,b,sizeof(a));
const double eps = 1e-10;
const int inf =0x7f7f7f7f;
const double pi=acos(-1);
const int N=100005; struct node{
int a,b;ll t;
}flower[N]; bool cmp(node a,node b)
{
return a.t<b.t;
} ll dp[N][3];
int n,m,d,x[N]; void init(int cur)
{
for(int i=1;i<=n;i++) dp[i][cur]=-1e15;
} int main()
{
while(~scanf("%d%d%d",&n,&m,&d))
{
for(int i=1;i<=m;i++)
scanf("%d%d%lld",&flower[i].a,&flower[i].b,&flower[i].t);
sort(flower+1,flower+m+1,cmp); int cur=0;
for(int i=1;i<=n;i++)
{
dp[i][cur]=flower[1].b-abs(flower[1].a-i);
} for(int k=2;k<=m;k++)
{
cur^=1;
init(cur);
ll limit=(flower[k].t-flower[k-1].t)*d;
int l=1,r=1;
for(int i=1;i<=n;i++)
{
while(l<r&&dp[i][cur^1]>=dp[x[r-1]][cur^1]) r--;
x[r]=i;r++;
while(l<r&&(i-x[l]>limit)) l++;
dp[i][cur]=max(dp[i][cur],dp[x[l]][cur^1]+flower[k].b-abs(flower[k].a-i));
} l=1;r=1;
for(int i=n;i>=1;i--)
{
while(l<r&&dp[i][cur^1]>=dp[x[r-1]][cur^1]) r--;
x[r]=i;r++;
while(l<r&&(x[l]-i>limit)) l++;
dp[i][cur]=max(dp[i][cur],dp[x[l]][cur^1]+flower[k].b-abs(flower[k].a-i));
}
} ll ans=-1e15;
for(int i=1;i<=n;i++) ans=max(ans,dp[i][cur]);
printf("%lld\n",ans);
}
return 0;
}

  分析:经典的一道题,

1.首先预处理出第一次花开时,枚举在1-n各个点能获得的颜值。

2.dp[i][k]即为第k次花开时,人在i处获得的最大颜值,那么从小到大枚举每个i,并且维护一个从左到右的单调递减栈(第k-1多花开时),再判断当前枚举的i在单调栈中能达到的最左的点(限制条件就是人转移的距离),然后再从最左点转移一下到当前枚举的点i;

3.最后因为一个点可以从左边转移过来,也可以从右边转移过来,所以需要i从n到1再进行一次2步骤

这道题目能用单调栈降下来,关键是因为加入i跟i-1都能转移到j位置,那么如果dp[i][k-1]>=dp[i-1][k-1]的话,那么i-1这个点就不要判断了,直接丢掉

CDOJ 1132 酱神赏花 dp+单调栈降低复杂度+滚动数组的更多相关文章

  1. UESTC_酱神赏花 2015 UESTC Training for Dynamic Programming<Problem C>

    C - 酱神赏花 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 262143/262143KB (Java/Others) Submi ...

  2. [luogu]P1169 [ZJOI2007]棋盘制作[DP][单调栈]

    [luogu]P1169 [ZJOI]棋盘制作 ——!x^n+y^n=z^n 题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋 ...

  3. 【bzoj4540】[Hnoi2016]序列 单调栈+离线+扫描线+树状数组区间修改区间查询

    题目描述 给出一个序列,多次询问一个区间的所有子区间最小值之和. 输入 输入文件的第一行包含两个整数n和q,分别代表序列长度和询问数.接下来一行,包含n个整数,以空格隔开,第i个整数为ai,即序列第i ...

  4. cdoj 1141 酱神寻宝 状压dp

    酱神寻宝 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1141 Descri ...

  5. 【BZOJ】3039: 玉蟾宫(DP/单调栈)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3039 每次看到我的提交都有点淡淡的忧伤T_T.. 看到此题我想到用前缀和维护点ij向左和向上能拓展的 ...

  6. 【DP/单调栈】关于单调栈的一些题目(codevs 1159,codevs 2673)

    CODEVS 2673:Special Judge 题目描述 Description   这个月的pku月赛某陈没有参加,因为当时学校在考试[某陈经常逃课,但某陈还没有强大到考试也可以逃掉的程度].何 ...

  7. 【BZOJ 4709】柠檬 斜率优化dp+单调栈

    题意 给$n$个贝壳,可以将贝壳分成若干段,每段选取一个贝壳$s_i$,这一段$s_i$的数目为$num$,可以得到$num^2\times s_i$个柠檬,求最多能得到几个柠檬 可以发现只有在一段中 ...

  8. poj 2796 Feel Good dp || 单调栈

    题目链接 题意 对于一个长度为\(n\)的非负整数数列\(a_1,a_2,-,a_n\),求\(max_{1≤l≤r≤n}f(l,r)\), 其中 \[f(l,r)=min(a_l,a_{l+1},- ...

  9. bzoj 1233: [Usaco2009Open]干草堆tower【dp+单调栈】

    参考:https://www.cnblogs.com/N-C-Derek/archive/2012/07/11/usaco_09_open_tower.html 虽然长得很像斜率优化,但是应该不算-- ...

随机推荐

  1. iview Message(全局提示)与Notice(通知提醒)全局配置方法

    在使用iview 的Message与Notice组件时,可以对提示框的显示位置与显示时长进行配置. iview提供了两个配置属性.分别是: top 提示组件距离顶端的距离,单位像素. duration ...

  2. mysql解决fail to open file的方法

    由于没有安装有mysql的可视化工具,在使用cmd导入sql文件时,使用source 命令时出现 fail to open file的错误,各种查找后使用以下方法解决了: 1.首先进入mysql数据库 ...

  3. 解决VS2005打开js,css,asp.php等文件,中文都是乱码的问题

    用记事本打开可以正常观看但是用VS2005编辑器打开JS,中文确实乱码. 解决办法:在VS 2005 的设置里面选择自动检测Utf-8:“工具”->“选项”->“文本编辑器”->“自 ...

  4. mysql if else count 计数

    select mobile,avg(total),sum(click_day*click_money),sum(click_day),count(push_status),sum(clicks),co ...

  5. BZOJ4887可乐题解--矩阵运算

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4887 分析 话说这道题经常见到类似模型来计数算期望,概率啊,然而我太蒻了都不会做,今天看 ...

  6. Google谷歌总部员工家庭活动

    每年Google总部都会有针对家庭的两个大活动,其中一个就是万圣节.专门针对员工孩子的.#2019Googleween 今年的Googleween分几个场地,所以每个场地很小.她爸爸只带她去了一个.我 ...

  7. python爬取妹子图全站全部图片-可自行添加-线程-进程爬取,图片去重

    from bs4 import BeautifulSoupimport sys,os,requests,pymongo,timefrom lxml import etreedef get_fenlei ...

  8. Laravel 表单验证创建“表单请求”实现自定义请求类

    按照文档创建表单请求自定义类以后,调用总是403页面,咨询大佬说: public function authorize() { // 在表单验证类的这个方法这里要返回true,默认返回false,这个 ...

  9. 谷歌浏览器禁用JS步骤

    前奏: 当你想访问一个页面,因为不符合访问条件,而被JS阻拦:或者你打开的页面特效太多,干扰视线:亦或者JS的某个功能禁止了你的某些行为: 是不是很难受, 好办,咱给他禁了不就好啦,大胆地屏蔽它,不管 ...

  10. JS的 delete操作符 删除对象属性

    JS如何删除对象中的某一属性 var obj={ name: 'zhagnsan', age: 19 } delete obj.name //true typeof obj.name //undefi ...