BZOJ2298 [HAOI2011]problem a 【dp】
题目
一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低。”问最少有几个人没有说真话(可能有相同的分数)
输入格式
第一行一个整数n,接下来n行每行两个整数,第i+1行的两个整数分别代表ai、bi
输出格式
一个整数,表示最少有几个人说谎
输入样例
3
2 0
0 2
2 2
输出样例
1
提示
100%的数据满足: 1≤n≤100000 0≤ai、bi≤n
题解
一个人的话意思就是自己的分数排名在区间\([a_i + 1,n - b_i]\)之间,且这个区间内的分数都相等
那么我们现在有\(n\)个这样的区间
先去掉那些\(l > r\)的区间
由于相等的区间具有相同的真假性,我们可以合并
相交的区间不能共存,问题就转化为了选若干个带权区间不相交的最大值
按\(r\)排序,设\(f[i]\)为第\(i\)个区间为止的最大答案
我们只需找到最大的\(j<i\)使得\(r_j <l_i\),那么
\[f[i] = max(f[i - 1],f[j] + v_i)\]
可以二分查找
\(n - f[m]\)就是答案
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define LL long long int
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define BUG(s,n) for (int i = 1; i <= (n); i++) cout<<s[i]<<' '; puts("");
using namespace std;
const int maxn = 100005,maxm = 100005,INF = 1000000000;
inline int read(){int out = 0,flag = 1; char c = getchar();while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}return out * flag;
}
struct inter{int l,r,v;
}e[maxn];
inline bool operator <(const inter& a,const inter& b){return a.l == b.l ? a.r < b.r : a.l < b.l;
}
inline bool cmp(const inter& a,const inter& b){return a.r == b.r ? a.l < b.l : a.r < b.r;
}
int n,tot,f[maxn];
int find(int l,int r,int x){int mid;while (l < r){mid = l + r + 1 >> 1;if (e[mid].r < x) l = mid;else r = mid - 1;}return l;
}
int main(){int tn;tn = n = read();REP(i,n){e[i].l = read() + 1;e[i].r = n - read();e[i].v = 1;}tot = 0;for (int i = 1; i <= n; i++)if (e[i].l <= e[i].r) e[++tot] = e[i];n = tot;sort(e + 1,e + 1 + n);tot = 1;for (int i = 2; i <= n; i++)if (e[i].l == e[tot].l && e[i].r == e[tot].r)e[tot].v++;else e[++tot] = e[i];REP(i,tot) e[i].v = min(e[i].v,e[i].r - e[i].l + 1);sort(e + 1,e + 1 + tot,cmp);f[1] = e[1].v;for (int i = 2; i <= tot; i++){int pre = find(0,i - 1,e[i].l);f[i] = max(f[i - 1],f[pre] + e[i].v);}printf("%d\n",tn - f[tot]);return 0;
}
转载于:https://www.cnblogs.com/Mychael/p/8882068.html
BZOJ2298 [HAOI2011]problem a 【dp】相关推荐
- BZOJ2302 [HAOI2011]Problem c 【dp】
题目 给n个人安排座位,先给每个人一个1~n的编号,设第i个人的编号为ai(不同人的编号可以相同),接着从第一个人开始,大家依次入座,第i个人来了以后尝试坐到ai,如果ai被占据了,就尝试ai+1,a ...
- P2519-[HAOI2011]problem a【dp】
正题 题目链接:https://www.luogu.org/problem/P2519 题目大意 nnn个人,第iii个人说aia_iai个人比他高,bib_ibi个人比他低,允许有相同分数,求最 ...
- [LG P2519][BZOJ2298][HAOI2011]problem a
[LG P2519][BZOJ2298][HAOI2011]problem a 题目描述 一次考试共有n个人参加 第i个人说:"有ai个人分数比我高,bi个人分数比我低." 问最少 ...
- [uoj390][UNR #3]百鸽笼【dp】【容斥原理】
[题目链接] http://uoj.ac/problem/390 [题解] 考虑容斥原理,计算第 i i i列的时候,可以强制一些列在它之后被选取完,其他的列就不用处理了. 那么直到i" r ...
- 【DP】【期望】$P1850$换教室
[DP][期望]\(P1850\)换教室 链接 题目描述 有 \(2n\) 节课程安排在$ n$ 个时间段上.在第 \(i\)(\(1 \leq i \leq n\))个时间段上,两节内容相同的课程同 ...
- HPU 1002 A + B Problem II【大数】
HPU 1002 A + B Problem II[大数] A + B Problem II Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...
- Bailian2760 数字三角形【DP】
2760:数字三角形 描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (图1) 图1给出了一个数字三角形.从三角形的顶部到底部有很多条不同的路径.对于每条路径,把路径上面的数加起来可 ...
- NUC1131 Triangle【DP】
Triangle 时间限制: 1000ms 内存限制: 65536KB 通过次数: 1总提交次数: 1 问题描述 图1表示一个数字三角形. 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 ...
- LeetCode:完全平方数【279】【DP】
LeetCode:完全平方数[279][DP] 题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示 ...
最新文章
- 最新 crtmpserver 源码的获取方法
- html的选择器使用
- 吴裕雄 python 神经网络——TensorFlow 图、张量及会话
- android通知图标变白色,android 7.0通知图标出现白色方块
- mysql space id_MySQL8.0新特性:增加系统文件追踪space ID和物理文件的映射-阿里云开发者社区...
- android系统(3)---dumpsys 知识学习
- Android使用软引用和弱引用
- 定位叠放次序z-index(HTML、CSS)
- Leetcode 318答案详解(基于C++位操作)
- 明翰游戏学笔记V0.2(持续更新)
- 计算机类专业哪些专业比较好,计算机类专业有哪些 哪个专业比较好
- python如何编写温度转换_用python写温度转换
- 订单超时、定时任务解决方案和思路
- GateWay 网关服务
- 幸福人生在于正确选择
- 高通安卓关闭WiFi服务不卸载驱动
- selenium处理12306登录
- RAID磁盘阵列、mdadm、群晖软RAID
- matlab波门,一种距离波门拖引有源干扰的仿真设计方法与流程
- 计算机鼠标不会动,为什么鼠标突然不动了 有什么解决方法
热门文章
- textarea 固定大小,滚动条,限制拖动,文字对齐
- wpf silverlight开发框架(prism)系列教程
- MM的SQLDMO- -哈哈(数据备份与恢复篇)
- python中import cv2遇到的错误及安装方法_独家利用OpenCV,Python和Ubidots来构建行人计数器程序(附代码amp;解析)...
- ibmmq 通道命令_IBM_MQ常用命令的.doc
- matlab 博客,matlab
- c语言提取颜色,C语言颜色转换宏
- java 自定义注解_两步实现Java自定义注解
- Mysql-学习笔记(==》常用函数 八)
- 2016年第31周四