【DP】【树状数组】免费馅饼(luogu 7302/金牌导航 数据结构优化DP-4)
正题
luogu 7302
金牌导航 数据结构优化DP-4
题目大意
在坐标轴上会出现n个金币,第i个金币tit_iti时在wiw_iwi出现(只出现一个单位时间),价值为sis_isi,当你tit_iti时在wiw_iwi,就能获得该金币,每个单位时间你最多可以移动两个单位距离,现在问你最大价值是多少
解题思路
由于坐标轴较大,所以考虑从n下手
设f_i为捡到第i个金币的最大价值,那么有:
fi=min∣wi−wj∣⩽2×(ti−tj)(fj+si)f_i=\min_{|w_i-w_j|\leqslant 2\times(t_i-t_j)}(f_j+s_i)fi=∣wi−wj∣⩽2×(ti−tj)min(fj+si)
考虑优化,先把条件拆开:
{2ti−wi⩾2tj−wj(wi⩾wj)2ti+wi⩾2tj+wj(wi<wj)\left\{\begin{matrix}2t_i- w_i\geqslant 2t_j - w_j\ \ (w_i\geqslant w_j)\\ 2t_i+ w_i\geqslant 2t_j + w_j\ \ (w_i<w_j)\end{matrix}\right.{2ti−wi⩾2tj−wj (wi⩾wj)2ti+wi⩾2tj+wj (wi<wj)
不难证明:当满足当前情况的条件时,另一情况的条件也满足,那么就是要同时满足两个条件
上式是二维偏序,可以先排序,然后用树状数组存储解决
代码
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 100010
using namespace std;
int n, m, bn, b[N], c[N];
struct node
{int t, w, s, g1, g2;
}a[N];
void add(int x, int y)
{for (; x <= 100000; x += x&-x)c[x] = max(c[x], y);return;
}
int ask(int x)
{int g = 0;for (; x; x -= x&-x)g = max(g, c[x]);return g;
}
bool cmp(node a, node b)
{return a.g2 < b.g2;
}
int main()
{scanf("%d%d", &m, &n);for (int i = 1; i <= n; ++i){scanf("%d%d%d", &a[i].t, &a[i].w, &a[i].s);a[i].g1 = 2 * a[i].t - a[i].w;//计算两个偏序值a[i].g2 = 2 * a[i].t + a[i].w;b[i] = a[i].g1;}sort(b + 1, b + 1 + n);bn = unique(b + 1, b + 1 + n) - b - 1;for (int i = 1; i <= n; ++i)a[i].g1 = lower_bound(b + 1, b + 1 + bn, a[i].g1) - b;//离散化sort(a + 1, a + 1 + n, cmp);for (int i = 1; i <= n; ++i)add(a[i].g1, ask(a[i].g1 - 1) + a[i].s);//第二维偏序printf("%d", ask(100000));return 0;
}
【DP】【树状数组】免费馅饼(luogu 7302/金牌导航 数据结构优化DP-4)相关推荐
- 【DP】【树状数组】折线统计(金牌导航 数据结构优化DP-1)
正题 金牌导航 数据结构优化DP-1 题目大意 平面上有n个点,让你选择若干点,连接x坐标相邻的点,其中连续上升或下降的为一段,问你有多少中选择方案,使得段数为k 解题思路 设fi,j,0/1f_{i ...
- 【树状数组】递增子序列(金牌导航 数据结构优化DP-1)
递增子序列 金牌导航 数据结构优化DP-1 题目大意 给出一个序列,让你求长度为m的单调递增子序列的个数 输入样例 3 2 1 1 2 7 3 1 7 3 5 9 4 8 输出样例 2 12 数据范围 ...
- 【DP】【线段树】基站选址(luogu 2605/金牌导航 数据结构优化DP-2)
正题 luogu 2605 金牌导航 数据结构优化DP-2 题目大意 有若干个村庄在一条直线上,距离第一个村庄did_idi,在该村庄建立基站要花费cic_ici,如果在离该村不大于sis_isi ...
- 【DP】【树状数组】方伯伯的玉米田/优美玉米(luogu 3287/金牌导航 数据结构优化DP-5)
正题 luogu 3287 金牌导航 数据结构优化DP-5 题目大意 有n个玉米,给出高度,你可以选择一个区间,使这个区间的玉米高度+1,你可以进行k次这样的操作,查询你操作完后最长不下降子序列最大值 ...
- 树形DP+树状数组 HDU 5877 Weak Pair
1 //树形DP+树状数组 HDU 5877 Weak Pair 2 // 思路:用树状数组每次加k/a[i],每个节点ans+=Sum(a[i]) 表示每次加大于等于a[i]的值 3 // 这道题要 ...
- BZOJ2131免费的馅饼 DP+树状数组
免费的馅饼 Description Input 第一行是用空格隔开的二个正整数,分别给出了舞台的宽度W(1到10^8之间)和馅饼的个数n(1到10^5). 接下来n行,每一行给出了一块馅饼的信息.由三 ...
- bzoj 2131: 免费的馅饼【dp+树状数组】
简单粗暴的dp应该是把馅饼按时间排序然后设f[i]为i接到馅饼能获得的最大代价,转移是f[i]=max(f[j])+v[i],t[j]<=t[i],2t[i]-2t[j]>=abs(p[i ...
- luogu P2344 奶牛抗议 DP 树状数组 离散化
P2344 奶牛抗议 最新讨论 暂时没有讨论 题目背景 Generic Cow Protests, 2011 Feb 题目描述 约翰家的N 头奶牛正在排队游行抗议.一些奶牛情绪激动,约翰测算下来,排在 ...
- 小魂和他的数列(dp+树状数组优化)
链接:https://ac.nowcoder.com/acm/contest/3566/C 来源:牛客网 Sometimes, even if you know how something's goi ...
最新文章
- 重磅开源!首个基于Transformer的视频理解网络来啦!
- JavaScript 进阶(二)变量作用域
- springboot 获取bean_SpringBoot高级(自动配置 事件监听 监控)
- 如何使用第三方日志记录提供程序替代.NET Core中的内置程序
- c++ queue学习
- oracle数据库read only,oracle 报错Linux-x86_64 Error: 30: Read-only file system
- 蓝色版去水印小程序源码+接口
- pcb板可挖孔吗_PCB板微孔加工方法之机械钻孔
- matex2推送鸿蒙系统,拜拜了,Powered by Android!
- 三、JVM — 类加载过程
- PDF编辑技巧 PDF怎么复制页面
- Java IO与NIO的区别
- 2手房地产营销企划书
- SecureCRT 8.3破解
- php自定义建站系统,PbootCMS(开源免费PHP建站系统) V2.0.9 官方版
- html5 canvas 绘制、移动方块及撤销操作
- 同心拼图(concentric mosaics)
- ERP : 经济批量
- 阿里文娱永叔:利器or成本损耗?算法不是黑匣子
- C++STL面试详解
热门文章
- html5 获取文件属性,H5新属性--file文件读取
- java递归单链表查找中间元素_《数据结构与算法——C语言描述》答案 3.11 查找单链表中的特定元素(递归)...
- qint64转为qstring qt_Qt中Qstring,char,int,QByteArray之间到转换
- 上海市二级c语言软件环境,上海市计算机二级C语言复习资料 word整理版.doc
- 区域转换为二值图像_Matlab图像处理系列教程(一)
- C++map容器-构造和赋值
- 英语期末复习unit 1-2课后习题第一题及背诵段落
- Redis分布式锁奥义
- python docx runs_别再问我Python怎么操作Word了!
- CoreJava 笔记总结-第十二章 并发-1