[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个人分数比我低.”问最少有几个人没有说真话( ...
随机推荐
- 11个phpstorm 快捷键介绍
11个phpstorm 快捷键介绍 http://phpstorm.tips/tips/11-toggling-case
- Java并发编程Semaphore
信号量 信号量类Semaphore,用来保护对唯一共享资源的访问.一个简单的打印队列,并发任务进行打印,加入信号量同时之能有一个线程进行打印任务 . import java.util.concurre ...
- Xshell配置SSH秘钥登录
秘钥生成 生成公钥 工具 -> 新建用户秘钥生成向导 -> 下一步 -> 点击下一步,输入密码: 点击下一步 点击保存为文件,完成. 生成私钥 工具 -> 用户秘钥管理者 选中 ...
- C++ Primer Plus阅读笔记
cin进行文本输入 使用cin获取字符的基本方式 char ch; cin >> ch; cin读取char值时将忽略空格和换行符.此外,发送给cin的输入被缓冲.这意味着只有在用户按下回 ...
- PHPUnit 手册
PHPUnit 手册 Sebastian Bergmann 版权 © 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 ...
- git使用步骤_2017
(部署项目) zbot deploy developer git对文件chmod 777后导致status发生变化,使用: git config core.fileMode false [当 ...
- C# 使用 SmtpClient 发送邮件注意项
最近有邮件发送需求,使用 C# SmtpClient 对象发送邮件 , 报异常, 如下错误代码: 调整代码顺序后,发送邮件成功! 注意:一定要先设置 EnableSsl和UseDefaultCred ...
- Oracle创建表时Storage参数具体含义
本文通过图表和实例的阐述在Oracle数据库创建新表时Storage的参数具体含义. 可用于:表空间.回滚段.表.索引.分区.快照.快照日志 参数名称 缺省值 最小值 最大值 说明 INITIAL 5 ...
- js使用defineProperty的一些坑
var p2={ }; Object.defineProperty(p2,"gs",{ get:function () { return this.gs; }, set:funct ...
- Hibernate学习(二)保存数据
package cn.lonecloud.test; import java.util.Date; import org.hibernate.HibernateException; import or ...