Jzoj4845 寻找
这是个二维平面世界,平面上有n个特殊的果实,我从(0,0)点出发,希望得到尽量多的果实,但是出于某种特殊的原因,我的运动方式只有三种(假设当前我在(x,y)):
1、我可以走到(x+1,y)
2、我可以走到(x,y+1)
3、我可以走到(x+1,y+1)
现在我需要你的帮助,帮我找出我最多能够得到多少个果实。
经典的二维dp,我们设f[i][j]表示。。。
非常水的一维dp,我们将所有的点按照x排序让后做一次最长不下降子序列就好了
这里比较老实地用了离散化+数据结构,比二分好想多了。。。2333333
#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 100010
#define mid (l+r>>1)
using namespace std;
struct dt{ int x,y; } s[N];
int n,v[N],r[N],m,w[N<<2],f[N];
inline bool c1(dt a,dt b){ return a.x<b.x; }
void update(int l,int r,int x,int p,int k){if(l==r){ w[x]=max(w[x],k); return; }if(p<=mid) update(l,mid,x<<1,p,k);else update(mid+1,r,x<<1|1,p,k);w[x]=max(w[x<<1],w[x<<1|1]);
}
int query(int l,int r,int x,int L,int R){if(L<=l && r<=R) return w[x];int Ans=0;if(L<=mid) Ans=max(Ans,query(l,mid,x<<1,L,R));if(mid<R) Ans=max(Ans,query(mid+1,r,x<<1|1,L,R));return Ans;
}
int main(){freopen("find.in","r",stdin);freopen("find.out","w",stdout);scanf("%d",&n);for(int x,y,i=1;i<=n;++i){scanf("%d%d",&x,&y);if(x<0 || y<0){ --n; --i; }else s[i]=(dt){x,y};}sort(s+1,s+1+n,c1);for(int i=1;i<=n;++i) v[i]=s[i].y;sort(v+1,v+1+n); m=unique(v+1,v+1+n)-v-1; for(int i=1;i<=n;++i) r[i]=lower_bound(v+1,v+1+n,s[i].y)-v;for(int i=1;i<=n;++i){ f[i]=query(0,m,1,0,r[i])+1; update(0,m,1,r[i],f[i]); }printf("%d\n",w[1]);
}
转载于:https://www.cnblogs.com/Extended-Ash/p/9477264.html
Jzoj4845 寻找相关推荐
- Redis 笔记(13)— scan 和 keys 寻找特定前缀key 字段(命令格式、使用示例、定位大key)
1. keys Redis 提供了一个简单暴力的指令 keys 用来列出所有满足特定正则字符串规则的 key. 127.0.0.1:6379> keys * (empty array) 127. ...
- 寻找一个字符串的重复子串 后缀数组
什么是后缀数组 令字符串 S=S[1]S[2]...S[n]S=S[1]S[2]...S[n]{\displaystyle S=S[1]S[2]...S[n]} , S[i,j]S[i,j]{\dis ...
- LeetCode简单题之寻找比目标字母大的最小字母
题目 给你一个排序后的字符列表 letters ,列表中只包含小写英文字母.另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母. 在比较时,字母是依序循环出现的.举个例子 ...
- 交换机应用寻找10个完美的因素
交换机应用寻找10个完美的因素 10 factors for finding the perfect switch for your application 选择开关的过程并不总是值得注意的.考虑到大 ...
- 寻找汽车连接的解决方案
寻找汽车连接的解决方案 Finding solutions for automotive vehicle connectivity 汽车制造商正在增加完全依赖于连通性的功能,汽车也开始联网.这是件好事 ...
- 《OpenCV3编程入门》学习笔记8 图像轮廓与图像分割修复(二)寻找物体的凸包
8.2 寻找物体的凸包 8.2.1 概念 1.给定二维平面上的点集,将最外层点连接起来构成的凸多边形. 2.理解物体形状或轮廓的一种比较有用的方法是计算一个物体的凸包,然后计算其凸缺陷(convexi ...
- 数据存储方式_寻找要操作数据的存储地址的过程称为寻址,几种寻址的方式分享...
单片机工作时,在程序指令的控制下,对数据进行各种操作(如存取数据.对数据进行运算等),然后输出控制信号.指令要对数据进行操作,必须先找到操作的数据,数据存放在存储器中,只有找到要操作数据的存储地址,才 ...
- C语言通路寻找,用C语言解决迷宫问题设计与寻找通路问题.pdf
用c语言解决迷宫设计与寻找通路问题 摘 要:本课程设计主要解决设计一个迷宫以及在给出一组入口和出口的情况下,求出一条通路的问题.在课程 设计中,程序设计语言采用VisualC++6.0,数据结构采用顺 ...
- 使用cv2.Sobel()、cv2.Scharr()、cv2.Laplacian()寻找图像的梯度、边缘
Python,OpenCV寻找图像的梯度.边缘 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用cv2.Sobel().cv2.Scharr().cv2.Laplacian()寻找图像的梯度.边 ...
最新文章
- Mysql练习题13- 员工薪水中位数
- css层叠上下文详解,CSS定位(层叠上下文)
- XML请求数据和解析
- leetcode 349. 两个数组的交集 思考分析
- 《JavaScript高级程序设计》红宝书第一遍阅读(了解概念)
- 第十天学习@javascript
- jquery的历史版本
- 计算机Excel应用案例,Excel VBA在Office中的应用案例
- Linux GCC编译详细
- 【Excel】数据处理与查看
- 计算机管理格式化硬盘,磁盘管理格式化硬盘出错的解决方法
- html显示vbs变量,VBS 读取 对象某属性已连接的变量的变量名
- 基于5g的交通运输_一种基于5G的智慧交通基础服务平台
- 三分钟用HCaaS打造一台拥有公网IP的服务器
- Unity基础(三)3D场景搭建
- JavaWeb之Web核心(6)
- Ripple(瑞波)服务器配置示例
- 地平线征程5开发平台简介
- springboot毕设项目小区停车场管理系统zvzay(1)(java+VUE+Mybatis+Maven+Mysql)
- ncnn编译使用(一)
热门文章
- BZOJ 2429: [HAOI2006]聪明的猴子【最小生成树】
- Processing Orders With Windows Workflow
- Exploring the 7 Different Types of Data Stories
- 记本阶段建站心得,是走无限做垃圾站之路还是真正的开发之路
- ndarray.shape[]返回值的意义
- 快速获取OpenCV库(Lib)文件下的所有文件的目录名~
- 图像投影特征图的波峰波谷查找的相关原理及利用差分遍历法查找波峰的OpenCV代码
- OpenCV中Mat类的重载运算符operator()的用法
- list vue 删除后页面渲染_浅谈Vue项目实战(页面渲染+事件绑定)
- linux用户层驱动--VFIO(五)