[HAOI2011]problem a
题目大意:
网址:https://www.luogu.org/problemnew/show/2519
大意:
一次考试共有\(n\)个人参加,
第\(i\)个人说:“有\(a_i\)个人分数比我高,\(b_i\)个人分数比我低。”问最少有几个人没有说真话(可能有相同的分数)
数据范围:$ 1≤n≤100000 0≤a_i、b_i≤n$
题目解法:
有\(a_i\)个人分数比我高,\(b_i\)个人分数比我低,
意味着这个人在成绩序列中处在\([a_i+1 , n - b_i]\)中。
并且\([a_i+1 , n - b_i]\)这个区间中的人成绩都是一样的。
显然可以\(DP\)了。
\(f[i]\)表示到了成绩序列的第\(i\)个位置,说真话的最大人数。
那么假设存在这样一个区间\([t,i]\),说自己属于此区间的有\(sum\)个人。
则转移:\[f[i] = max(f[i] , f[t-1] + sum);\]
用\(vector\)挂链,然后大力\(DP\)跑即可啦。(这题难度主要在模型的转化)
实现代码:
#include<bits/stdc++.h>
#define maxn 1000005
#define ll long long
#define gi(x) scanf("%lld",&x)
using namespace std;
vector<ll>gp[maxn]; ll nw,n,a,b,l,r,f[maxn],t[maxn];
int main(){
gi(n);
for(ll i = 1; i <= n; i ++){
gi(a); gi(b);
l = a+1; r = n-b;
if(l<=r)gp[r].push_back(l); //如果l>r那么肯定是假话。
}
for(ll i = 1; i <= n; i ++){
f[i] = f[i-1];
if(gp[i].empty())continue;
int m = gp[i].size();
for(ll j = 0; j < m; j ++)t[j+1] = gp[i][j];
sort(t+1,t+m+1);
for(ll j = 1,sum = 0; j <= m+1; j ++){
if(t[j]==t[j-1]){sum++;continue;}
if(sum)f[i] = max(f[i] , f[t[j-1]-1] + min(i-t[j-1]+1 , sum));
sum = 1;
}
}
cout<<n - f[n]; return 0;
}
[HAOI2011]problem a的更多相关文章
- BZOJ2301: [HAOI2011]Problem b[莫比乌斯反演 容斥原理]【学习笔记】
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MBSubmit: 4032 Solved: 1817[Submit] ...
- bzoj 2301: [HAOI2011]Problem b
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MB Submit: 3757 Solved: 1671 [Submit] ...
- HAOI2011 problem b
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MBSubmit: 1047 Solved: 434[Submit][ ...
- BZOJ 2298: [HAOI2011]problem a 动态规划
2298: [HAOI2011]problem a Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnli ...
- BZOJ 2301: [HAOI2011]Problem b 莫比乌斯反演
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MBSubmit: 1007 Solved: 415[Submit][ ...
- 2301: [HAOI2011]Problem b
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MBSubmit: 4164 Solved: 1888[Submit] ...
- BZOJ 2302: [HAOI2011]Problem c( dp )
dp(i, j)表示从i~N中为j个人选定的方案数, 状态转移就考虑选多少人为i编号, 然后从i+1的方案数算过来就可以了. 时间复杂度O(TN^2) ------------------------ ...
- BZOJ 2301: [HAOI2011]Problem b( 数论 )
和POI某道题是一样的... http://www.cnblogs.com/JSZX11556/p/4686674.html 只需要二维差分一下就行了. 时间复杂度O(MAXN + N^1.5) - ...
- 2301: [HAOI2011]Problem b ( 分块+莫比乌斯反演+容斥)
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MBSubmit: 6015 Solved: 2741[Submit] ...
- BZOJ_2298_[HAOI2011]problem a_线段树
BZOJ_2298_[HAOI2011]problem a_线段树 Description 一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低.”问最少有几个人没有说真话( ...
随机推荐
- 损失函数 hinge loss vs softmax loss
1. 损失函数 损失函数(Loss function)是用来估量你模型的预测值 f(x) 与真实值 Y 的不一致程度,它是一个非负实值函数,通常用 L(Y,f(x)) 来表示. 损失函数越小,模型的鲁 ...
- 浅讲JUnit
JUnit单元简介: JUnit ----是一个开发源码的java测试框架,用于编写和运行可重复的测试,它是用于单元测试框架体系xUnit的一个实例, 用于java语言,主要用于白盒测试,回 ...
- java使用*导包的性能
项目中切换到IDEA工具,使用Git提交代码之后在comments中被吐槽了.事情是这样的原有的导入包被IDEA优化了,譬如java.util.Set, java.util.Map, ... 会被优化 ...
- eslint规则
碰到eslint报错, 把错误的提示拷贝在这里Ctrl + F找到复制到eslint.js里面就行了. "off"或者0,不启用这个规则 "warn"或者1,出 ...
- Linux 每日命令行
uptime 用于查看系统的负载信息. 它依次显示 当前系统时间.系统已运行时间.启用终端数量及平均负载值等信息.平均负载指的是系统在最近1分钟.5分钟.15分钟内的压力情况:负载值越低越好,尽量不要 ...
- Linux目录结构及作用
/:根目录 /bin:存放基础系统所需的最基础的命令(程序) binary 比如:ls.cp.mkdir等 功能和/usr/bin类似,这个目录中的文件都是可执行的,普通用户都可以使用的命令 /b ...
- Python3实现QQ机器人自动爬取百度文库的搜索结果并发送给好友(主要是爬虫)
一.效果如下: 二.运行环境: win10系统:python3:PyCharm 三.QQ机器人用的是qqbot模块 用pip安装命令是: pip install qqbot (前提需要有request ...
- RegexKitLite编译报错
报错如下: Undefined symbols for architecture i386: "_uregex_open", referenced from: _rkl_getC ...
- the c programing language 学习过程2
manipulated 操纵 notations符号 hexadecimal十六进制 precision精度 be concatenated at 把····联系起来 enumerations枚举 ...
- DOCKER 无法获取使用宿主机DNS 的原因,解决方法
今天在公司服务器上部署项目,遇到一个大坑.接口怎么请求都不同,宿主机DNS已经改了.宿主可以请求,找了半天,原来是DOCKER 没有获取到主机的DNS 进去DOCKER解析不了域名 指定DNS 启动也 ...