题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2131

思路: 题目给出了每个馅饼的下落时间t,和位置p,以及价值v,我们可以得到如下状态转移方程:

dp[i] = max(dp[j]) + v[i]  (|p[j] - p[i]| <= 2*|t[i] - t[j]|)

我们将约束条件拆开来:p[i] - p[j] <= 2*t[i]-2*t[j]&&p[i] - p[j] <= 2*t[j] - 2*t[i]

上面式子移向后可得: 2*t[j] - p[j] <= 2*t[i] - p[i]&&2*t[j] + p[j] <= 2*t[i] + p[i];

我们可以用   a[i].x = p[i] + 2*t[i];

a[i].y = 2*t[i] - p[i];

式子就变成了: a[j].x <= a[i].x&&a[j].y <= a[i].y;

对于点i来说,他的上一个状态点j必须满足上面的式子的约束,对于点i我们需要得到所有满足条件的点j的最大值。

其实这个式子就是一个二维偏序,二维偏序之前写过,只要我们对 a[i].x排序,对a[i].y建树状数组维护就好了。

实现代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int M = 1e5 + ;
int n,m,cnt,val[M],c[M],b[M];
struct node{
int x,y,val;
}a[M]; bool cmp(node a,node b){
if(a.x == b.x) return a.y < b.y;
return a.x < b.x;
} void add(int x,int p){
while(x <= cnt){
c[x] = max(c[x],p);
x += (x&-x);
}
} int getsum(int x){
int ans = ;
while(x){
ans = max(ans,c[x]);
x -= (x&-x);
}
return ans;
} int main()
{
int t,p;
cin>>m>>n;
for(int i = ;i <= n;i ++){
cin>>t>>p>>a[i].val;
a[i].x = *t + p;
a[i].y = *t - p;
b[i] = a[i].y;
}
sort(a+,a++n,cmp);
sort(b+,b++n);
cnt = unique(b+,b++n) - b-;
int ans;
for(int i = ;i <= n;i ++){
int id = lower_bound(b+,b++cnt,a[i].y)-b;
ans = getsum(id)+a[i].val;
add(id,ans);
}
cout<<getsum(cnt)<<endl;
}

bzoj 2131 : 免费的馅饼 (树状数组优化dp)的更多相关文章

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

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

  2. bzoj2131 免费的馅饼——树状数组优化dp

    中文题目,问你最后能最多够得到多少价值的馅饼.因为宽度10^8且个数为10^5.所以不可以用dp[x][y]表示某时间某地点的最大权值. 假设你在x点处接到饼后想去y点接饼.那么需要满足的条件是t[y ...

  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. BZOJ 3594: [Scoi2014]方伯伯的玉米田 (二维树状数组优化DP)

    分析 首先每次增加的区间一定是[i,n][i,n][i,n]的形式.因为如果选择[i,j](j<n)[i,j](j<n)[i,j](j<n)肯定不如把后面的全部一起加111更优. 那 ...

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

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

随机推荐

  1. HDU 3478 Catch (连通性&&二分图判断)

    链接 [https://vjudge.net/contest/281085#problem/C] 题意 一个n个点,m条边的图,开始的点是s 每次必须移动到相邻的位置,问你是否存在某个时刻所有点都可能 ...

  2. 泛函p121可分Hilbert空间都同构于l^2

    如何理解最后面两句话, L^2与l^2同构 L^2里面 有理系数多项式 是可数稠密子集 所以L^2可分 可分Hilbert空间都同构于 l^2 傅里叶级数是一个稠密的子集

  3. 【学习总结】C-翁恺老师-入门-总

    2019-1-2 翁恺老师C入门视频-启程 代码详见GitHub: 目录 第0周:程序设计与C语言 第1周:计算 第2周:判断 第3周:循环 第4周:循环控制 第5周:数据类型 第6周:函数 第7周: ...

  4. PAT L2-023 图着色问题

    https://pintia.cn/problem-sets/994805046380707840/problems/994805057298481152 图着色问题是一个著名的NP完全问题.给定无向 ...

  5. centos7 network eno16777736

    Network service not running - eno16777736 not activated - CentOShttps://www.centos.org/forums/viewto ...

  6. Es6数值拓展

    Es6数值拓展 一,Number扩展 1,ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示. 将0b和0o前缀的字符串数值转为十进制,要使用Number方法 N ...

  7. javax.validation.ValidationException: Unable to create a Configuration, because no Bean Validation provider could be found. Add a provider like Hibernate Validator (RI) to your classpath.

    项目依赖 <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifa ...

  8. null值经过强转会怎样?

    null还是null,类型不会改变的,也不会报错!

  9. centso7 安装redmine

    一.安装rvm ###安装rvm gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D3 ...

  10. Python:matplotlib绘制条形图

    条形图,也称柱状图,看起来像直方图,但完是两码事.条形图根据不同的x值,为每个x指定一个高度y,画一个一定宽度的条形:而直方图是对数据集进行区间划分,为每个区间画条形.     将上面的代码稍微修改一 ...