[luogu] P2519 [HAOI2011]problem a (贪心)
P2519 [HAOI2011]problem a
题目描述
一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低。”问最少有几个人没有说真话(可能有相同的分数)
输入输出格式
输入格式:
第一行一个整数n,接下来n行每行两个整数,第i+1行的两个整数分别代表ai、bi
输出格式:
一个整数,表示最少有几个人说谎
输入输出样例
输入样例#1: 复制
3
2 0
0 2
2 2
输出样例#1: 复制
1
说明
100%的数据满足: 1≤n≤100000 0≤ai、bi≤n
题解
本题因为过度巧妙引起极度不适。
看题十分钟。。。暴力都不会。
日常开题解。
我只想到了对于一个人,
在\([a_i+1,n-b_i]\)内累计人数超过的这个区间的就不算了。
还有本身矛盾的就是\(a_i+b_i>=n\)。
然后怎么做啊。。。
一看题解,做完了。。。
我们把人转为\([a_i+1,n-b_i]\)的区间以后,这个区间有一个价值,就是当前描述位于这个区间合法(有没有多于这个区间)的人数。
然后dp求一下第i个人时的最大值就可以了。
\(f[i]=max(f[i-1],f[next]+val);\)
Code
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<map>
#include<vector>
using namespace std;
const int N=1e6+5;
int n,f[N];
vector<int>q[N];
map<pair<int,int>,int>mp;
int read(){
int x=0,w=1;char ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*w;
}
int main(){
n=read();
for(int i=1;i<=n;i++){
int l=read(),r=read();
l++;r=n-r;
if(l>r)continue;
if(++mp[make_pair(l,r)]==1)
q[r].push_back(l);
}
for(int i=1;i<=n;i++){
f[i]=f[i-1];
for(int j=0;j<q[i].size();j++)
f[i]=max(f[i],f[q[i][j]-1]+min(i-q[i][j]+1,mp[make_pair(q[i][j],i)]));
}
cout<<n-f[n]<<endl;
return 0;
}
[luogu] P2519 [HAOI2011]problem a (贪心)的更多相关文章
- Luogu P2519 [HAOI2011]problem a
题目链接 \(Click\) \(Here\) \(DP\)神题.以后要多学习一个,练一练智商. 关键点在于把"有\(a_i\)个人分数比我高,\(b_i\)个人分数比我低"这句话 ...
- Luogu P2522 [HAOI2011]Problem b
如果你做过[Luogu P3455 POI2007]ZAP-Queries就很好办了,我们发现那一题求的是\(\sum_{i=1}^a\sum_{j=1}^b[\gcd(i,j)=d]\),就是这道题 ...
- 【题解】Luogu P2522 [HAOI2011]Problem b
原题传送门 这题需要运用莫比乌斯反演(懵逼钨丝繁衍) 我们看题面,让求对于区间\([a,b]\)内的整数x和\([c,d]\)内的y,满足$ gcd(x,y)=k$的数对的个数 我们珂以跟容斥原理(二 ...
- P2519 [HAOI2011]problem a
思路 神仙思路,就差一步就能想出来了... 看到第i个人给出的条件,发现有\(a_i\)个大于,\(b_i\)个小于并不好处理 考虑把条件转化成第i个人对应的排名处理,设第i个人的排名为\(a_i+1 ...
- Luogu P2522 [HAOI2011]Problem b 莫比乌斯反演
设$f(d)=\sum_{i=1}^N\sum_{j=1}^M[gcd(i,j)==d],\\F(n)=\sum_{n|d}f(d)=\lfloor \frac{N}{n} \rfloor \lflo ...
- 洛谷 P2519 [HAOI2011]problem a
传送门 考虑转化为求最多说真话的人数 设$f(i)$表示排名前$i$的人中最多说真话的人的数量,考虑转移,如果由$j$转移而来,可以设$[j,i]$之间的人全都分数相等,那么式子就是$f[i]=f[j ...
- luogu 2519 [HAOI2011]problem a 动态规划+树状数组
发现每一次 $[b[i]+1,n-a[i]]$ 这个区间的分数必须相同,否则不合法. 而一个相同的区间 $[l,r]$ 最多只能出现区间长度次. 于是,就得到了一个 $dp:$ 将每一种区间的出现次数 ...
- Luogu 1090 合并果子(贪心,优先队列,STL运用)
Luogu 1090 合并果子(贪心,优先队列,STL运用) Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每 ...
- BZOJ_2298_[HAOI2011]problem a_线段树
BZOJ_2298_[HAOI2011]problem a_线段树 Description 一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低.”问最少有几个人没有说真话( ...
随机推荐
- codevs——T2102 石子归并 2
http://codevs.cn/problem/2102/ 时间限制: 10 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Des ...
- [Preference] How to avoid Forced Synchronous Layout or FSL to improve site preference
When tigger site updates the layout, it always follow this order: Javascript trigger style changes, ...
- 【iOS开发-78】用代码实现UITabBarController+UINavigationController
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2Vpc3ViYW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...
- hdu 1754 I Hate It 线段树 点改动
// hdu 1754 I Hate It 线段树 点改动 // // 不多说,裸的点改动 // // 继续练 #include <algorithm> #include <bits ...
- eclipse转Android studio遇到的那些坑
公司项目有导入10多个libray,还有涉及ndk,转Android studio时碰到不少问题.前后大概花费5个工作日,中间各种奇葩bug,各种编译出错,非常多还有没错误提示.一度想过 ...
- Tomcat学习之ClassLoader
Tomcat学习之ClassLoader 2012-09-04 22:19 8993人阅读 评论(4) 收藏 举报 分类: WEB服务器(13) 版权声明:本文为博主原创文章,未经博主允许不得转载 ...
- CF149D 区间dp
http://codeforces.com/problemset/problem/149/D D. Coloring Brackets time limit per test 2 seconds me ...
- NOI.AC: NOIP2018 全国模拟赛习题练习
闲谈: 最后一个星期还是不浪了,做一下模拟赛(还是有点小虚) #30.candy 题目: 有一个人想买糖吃,有两家商店A,B,A商店中第i个糖果的愉悦度为Ai,B商店中第i个糖果的愉悦度为Bi 给出n ...
- linux HBA 卡驱动安装
系统环境操作系统 : RHEL5.0设备 DL580G5 HBA 卡:Qlogic 2343连接存储: EVA8100---------------------------------------- ...
- Java-杂项: Java中Array和ArrayList区别
ylbtech-Java-杂项: Java中Array和ArrayList区别 1.返回顶部 1. 1)精辟阐述:可以将 ArrayList想象成一种“会自动扩增容量的Array”. 2)Array( ...