中文题目,问你最后能最多够得到多少价值的馅饼。因为宽度10^8且个数为10^5。所以不可以用dp[x][y]表示某时间某地点的最大权值。

假设你在x点处接到饼后想去y点接饼。那么需要满足的条件是t[y]-t[x]>= | d[x]-d[y] | ,距离带绝对值,因为可以y在左x在右也可以反过来。

变化可得: ⑴t[y]-t[x]>= d[x]-d[y]  ——> t[y]+d[y]>= t[x]+d[x]

      ⑵t[y]-t[x]>= d[y]-d[x]  ——> t[y]-d[y]>= t[x]-d[x]

      我们把t[x]+d[x]设为a[x].x   把t[x]-d[x]设为a[x].y   只要满足t[x].x<=t[y].x且t[x].y<=t[y].y 那么便满足条件。

      我们按照先.x后.y的顺序排序。这样从左到右遍历的时候就可以保证前面的.x小于后面的.x了,之后只要考虑.y的关系

我们用数组b来存.y的值,之后去重。从1到n遍历数组a,对遍历到的a[i].y在b数组中用二分找到他对应的位置。然后去树状数组里面查找比这个数小的数中值最大的那个状态,那个状态加上a[i].v(排序后第i个的价值)就是当前i点的最大价值,再把这个值加入到树状数组里面去。在最后,直接在b数组中查找最大的编号,就可以找到总价值最大的状态,也就是答案。

#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
int b[],l;
struct dd
{
int x,y,v;
}a[];
int c[];
int add(int x,int v)
{
while(x<=l)
{
c[x]=max(c[x],v);
x+=(x&-x);
}
}
int find(int x)
{
int ans=;
while(x)
{
ans=max(ans,c[x]);
x-=(x&-x);
}
return ans;
}
int cmp(dd x,dd y)
{
if(x.x==y.x) return x.y<y.y;
return x.x<y.x;
}
int main()
{
int n,m,i,p,t;
scanf("%d%d",&m,&n);
for(i=;i<=n;i++)
{
scanf("%d%d%d",&t,&p,&a[i].v);
a[i].x=p+*t;
a[i].y=*t-p;
b[i]=a[i].y;
}
sort(a+,a+n+,cmp);
sort(b+,b++n);
l=unique(b+,b++n)-b-;
for(i=;i<=n;i++)
{
int id=lower_bound(b+,b++n,a[i].y)-b;
int ans=find(id)+a[i].v;
add(id,ans);
}
cout<<find(l)<<endl;
}

bzoj2131 免费的馅饼——树状数组优化dp的更多相关文章

  1. [bzoj2131]免费的馅饼 树状数组优化dp

    2131: 免费的馅饼 Time Limit: 10 Sec  Memory Limit: 259 MB[Submit][Status][Discuss] Description Input 第一行是 ...

  2. bzoj 2131 : 免费的馅饼 (树状数组优化dp)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2131 思路: 题目给出了每个馅饼的下落时间t,和位置p,以及价值v,我们可以得到如下状态 ...

  3. HDU 6240 Server(2017 CCPC哈尔滨站 K题,01分数规划 + 树状数组优化DP)

    题目链接  2017 CCPC Harbin Problem K 题意  给定若干物品,每个物品可以覆盖一个区间.现在要覆盖区间$[1, t]$. 求选出来的物品的$\frac{∑a_{i}}{∑b_ ...

  4. Codeforces 946G Almost Increasing Array (树状数组优化DP)

    题目链接   Educational Codeforces Round 39 Problem G 题意  给定一个序列,求把他变成Almost Increasing Array需要改变的最小元素个数. ...

  5. LUOGU P2344 奶牛抗议 (树状数组优化dp)

    传送门 解题思路 树状数组优化dp,f[i]表示前i个奶牛的分组的个数,那么很容易得出$f[i]=\sum\limits_{1\leq j\leq i}f[j-1]*(sum[i]\ge sum[j- ...

  6. 【题解】Music Festival(树状数组优化dp)

    [题解]Music Festival(树状数组优化dp) Gym - 101908F 题意:有\(n\)种节目,每种节目有起始时间和结束时间和权值.同一时刻只能看一个节目(边界不算),在所有种类都看过 ...

  7. 【题解】ARC101F Robots and Exits(DP转格路+树状数组优化DP)

    [题解]ARC101F Robots and Exits(DP转格路+树状数组优化DP) 先删去所有只能进入一个洞的机器人,这对答案没有贡献 考虑一个机器人只能进入两个洞,且真正的限制条件是操作的前缀 ...

  8. Codeforces 909C Python Indentation:树状数组优化dp

    题目链接:http://codeforces.com/contest/909/problem/C 题意: Python是没有大括号来标明语句块的,而是用严格的缩进来体现. 现在有一种简化版的Pytho ...

  9. BZOJ3594: [Scoi2014]方伯伯的玉米田【二维树状数组优化DP】

    Description 方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美. 这排玉米一共有N株,它们的高度参差不齐. 方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感 ...

随机推荐

  1. Linux/Windows 应用程序开发

    一.基础知识 虽然写的都是代码,但是代码运行在哪个级别什么位置,还是需要做好定位,这样才心中有数. 1.1 Linux [转载]讲述了中断.系统调用.Linux APIs和Shell的基本知识. 1 ...

  2. LockScreen

    <Window x:Class="XXX.Client.LockScreenView" xmlns="http://schemas.microsoft.com/wi ...

  3. mysql 查询 最大值,最小值,第二大,第三大 一共四个值

    最大值:select max(num) from table 第二大值:select max(num) from tablewhere num not in(select max(num) from ...

  4. 2017(4)数据库系统,分布式数据库,NoSQL,反规范化

    试题四(共 25 分) 阅读以下关于数据库分析与建模的叙述,在答题纸上回答问题 1至问题 3. [说明] 某电子商务企业随着业务不断发展,销售订单不断增加,每月订单超过了 50 万笔,急需开发一套新的 ...

  5. 如何去掉wordpress后台notice提示窗口

    我们在安装完wordpress插件后,有些会在后台页面弹出一个提示你去收费升级pro版,如下图所示,这无可厚非,基础功能可以免费用,如果要用高级功能可以升级.有些朋友觉得基础功能够用了,又不想看到弹出 ...

  6. mysql扩展性架构实践N库到2N 库的扩容,2变4、4变8

    mysql扩展性架构实践N库到2N 库的扩容,2变4.4变8 http://geek.csdn.net/news/detail/5207058同城 沈剑 http://www.99cankao.com ...

  7. CJSON parse.c

    #include <stdio.h> #include <stdlib.h> #include "cJSON.h" void printJson(cJSON ...

  8. java中xxe漏洞修复方法

    java中禁止外部实体引用的设置方法不止一种,这样就导致有些开发者修复的时候采用的错误的方法 之所以写这篇文章是有原因的!最早是有朋友在群里发了如下一个pdf, 而当时已经是2019年1月末了,应该不 ...

  9. POJ 1655 求树的重心

    POJ 1655 [题目链接]POJ 1655 [题目类型]求树的重心 &题意: 定义平衡数为去掉一个点其最大子树的结点个数,求给定树的最小平衡数和对应要删的点.其实就是求树的重心,找到一个点 ...

  10. CentOS 7 搭建Squid代理服务器

    Squid安装 官方地址:http://www.squid-cache.org/ [root@DaMoWang ~]# -r6d8f397.tar.gz [root@DaMoWang ~]# -r6d ...