bzoj2131: 免费的馅饼
首先我们很容易看出是一个DP
然后容易看出是数据结构优化DP
但是这个限制条件有点鬼畜:
abs(p[i]-p[j])/2<=(t[i]-t[j])
p[i]>p[j] -> t[i]*2-p[i]>=t[j]*2-p[j]
p[i]<p[j] -> t[i]*2+p[i]>=t[j]*2+p[j]
这样的话我只会树套树(后来想想带修主席树应该也行?)。。。。。信仰不够去%题解
结果发现这两个东西是可以放在一起的,也就是说如果满足p[i]>p[j]和t[i]*2-p[i]>=t[j]*2-p[j]那t[i]*2+p[i]>=t[j]*2+p[j]也满足(好像很显然啊是我柿子画得太丑看不出来吗)
就成了水水的二维偏序了。。。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std; int s[];
int lowbit(int x){return x&-x;}
void change(int x,int k)
{
while(x<=)
{
s[x]=max(s[x],k);
x+=lowbit(x);
}
}
int getmax(int x)
{
int ret=;
while(x>)
{
ret=max(ret,s[x]);
x-=lowbit(x);
}
return ret;
} struct node{int w1,w2,v;}a[];
bool cmp(node n1,node n2){return n1.w1==n2.w1?n1.w2<n2.w2:n1.w1<n2.w1;}
int lslen,ls[];
int main()
{
int W,n,t,p;
scanf("%d%d",&W,&n);
for(int i=;i<=n;i++)
{
scanf("%d%d%d",&t,&p,&a[i].v);
a[i].w1=t*-p;
a[i].w2=t*+p;
ls[++lslen]=a[i].w2;
}
sort(a+,a+n+,cmp);
sort(ls+,ls+lslen+);
lslen=unique(ls+,ls+lslen+)-ls-;
for(int i=;i<=n;i++)
a[i].w2=lower_bound(ls+,ls+lslen+,a[i].w2)-ls; for(int i=;i<=n;i++)change(a[i].w2,getmax(a[i].w2)+a[i].v);
printf("%d\n",getmax(lslen));
return ;
}
bzoj2131: 免费的馅饼的更多相关文章
- [bzoj2131]免费的馅饼_树状数组
免费的馅饼 bzoj-2131 题目大意: 注释:$1\le n \le 10^5$,$1\le w \le 10^8$. 想法:首先,想到dp 状态:dp[i][j]表示i分钟在位置j的最大收益 优 ...
- [bzoj2131]免费的馅饼 树状数组优化dp
2131: 免费的馅饼 Time Limit: 10 Sec Memory Limit: 259 MB[Submit][Status][Discuss] Description Input 第一行是 ...
- bzoj2131 免费的馅饼——树状数组优化dp
中文题目,问你最后能最多够得到多少价值的馅饼.因为宽度10^8且个数为10^5.所以不可以用dp[x][y]表示某时间某地点的最大权值. 假设你在x点处接到饼后想去y点接饼.那么需要满足的条件是t[y ...
- BZOJ2131 免费的馅饼【线段树优化DP】
Input 第一行是用空格隔开的二个正整数,分别给出了舞台的宽度W(1到10^8之间)和馅饼的个数n(1到10^5). 接下来n行,每一行给出了一块馅饼的信息.由三个正整数组成,分别表示了每个馅饼落到 ...
- bzoj2131: 免费的馅饼(树状数组)
Description Input 第一行是用空格隔开的二个正整数,分别给出了舞台的宽度W(1到10^8之间)和馅饼的个数n(1到10^5). 接下来n行,每一行给出了一块馅饼的信息.由三个正整数组成 ...
- 【BZOJ】2131: 免费的馅饼
2131: 免费的馅饼 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 508 Solved: 310[Submit][Status][Discuss ...
- 【bzoj2131】免费的馅饼 dp+树状数组
题解: 昨天好像做了个几乎一模一样的题目 按照ti排序 |p[i]-p[j]|<=2*(t[i]-t[j]) 然后去绝对值变为三维偏序 发现后两个式子可以推出ti<tj 所以就变成二维偏序 ...
- bzoj 2131 : 免费的馅饼 (树状数组优化dp)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2131 思路: 题目给出了每个馅饼的下落时间t,和位置p,以及价值v,我们可以得到如下状态 ...
- bzoj 2131 免费的馅饼
Written with StackEdit. Description Input 第一行是用空格隔开的二个正整数,分别给出了舞台的宽度\(W\)(\(1\)到\(10^8\)之间)和馅饼的个数\(n ...
随机推荐
- NSAllowsArbitraryLoadsInWebContent NSAllowsArbitraryLoads
By specifying NSAllowsArbitraryLoadsInWebContent, you are overriding NSAllowsArbitraryLoads on iOS 1 ...
- unittest自定义运行全量case or 运行指定的单个或多个case
import unittest import os from case.zufang.test_api_area_rentProlist import Zf1 case_path = os.path. ...
- jquery 时间戳转日期
搜了一下发现这个时间戳转时间的代码很好用,附上实践的代码 结果如下 / * * 时间戳转日期 * @param timestamp * @returns {*} */ function timesta ...
- MySQL数据导入sql文件过程中出错
错误类型: ERROR 1231 (42000): Variable 'time_zone' can't be set to the value of 'NULL' ERROR 1231 (42000 ...
- Django DTL模板语法中的过滤器
template_filter_demo 过滤器相关: 一.形式:小写{{ name | lower }} 二.串联:先转义文本到HTML,再转换每行到 <p> 标签{{ my_text| ...
- graph.h
#ifndef _GRAPH_#define _GRAPH_#include<stdio.h>#include<stdlib.h>#include<string.h> ...
- JavaSE 学习笔记之IO流(二十二)
IO流:用于处理设备上数据. 流:可以理解数据的流动,就是一个数据流.IO流最终要以对象来体现,对象都存在IO包中. 流也进行分类: 1:输入流(读)和输出流(写). 2:因为处理的数据不同,分为字节 ...
- python写第一个网页
1>安装django见别的博客http://djangobook.py3k.cn/2.0/chapter03/ 2>运行开发服务器 在命令提示符里进入目录mytest:cd: mytest ...
- Scala解析Json格式
Scala解析Json格式 代码块 Scala原生包 导入包 import scala.util.parsing.json._ def main(args: Array[String]): Unit ...
- [COGS309] [USACO 3.2] 香甜的黄油
★★ 输入文件:butter.in 输出文件:butter.out 简单对比 时间限制:1 s 内存限制:128 MB 描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖 ...