Time Limit: 10 Sec  Memory Limit: 256 MB
Submit: 1747  Solved: 876
[Submit][Status][Discuss]

Description

一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低。”问最少有几个人没有说真话(可能有相同的分数)

Input

第一行一个整数n,接下来n行每行两个整数,第i+1行的两个整数分别代表ai、bi

Output

一个整数,表示最少有几个人说谎

Sample Input

3

2 0

0 2

2 2

Sample Output

1

HINT

100%的数据满足: 1≤n≤100000   0≤ai、bi≤n

Source

感觉这是个语文题。

我们翻译一下每个人说的话

就变成了:我的排名为$a_i + 1$,和我分数相同的有$N - b_i-a_i$个

因此我们可以把$a+1,N-bi$抽象为一段区间,注意不同的区间可能相同,但这并不矛盾

然后就变成了带权区间覆盖问题

一种做法是套路排序+二分

另一种是处理出所有区间和所有区间的出现次数(用map记录)

用$f[i]$表示到名词为$i$时,有多少人说了真话

转移的时候枚举所有以$i$为结尾的区间就可以

注意区间$[l,r]$的出现次数最多为$r-l+1$次

第二种方法可以用hash做到$O(N)$(不过死活卡不过去之好用cc_hash_table)

// luogu-judger-enable-o2
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<map>
#include<vector>
#define Pair pair<int, int>
#define LL long long
const int MAXN = ;
using namespace std;
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/hash_policy.hpp>
using namespace __gnu_pbds;
inline int read() {
char c = getchar(); int x = , f = ;
while(c < '' || c > '') {if(c == '-') f = -; c = getchar();}
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * f;
}
int N;
vector<int>v[MAXN];
int f[MAXN];
cc_hash_table<LL, int>mp;
LL MP(LL a, LL b) {
return a + b * ;
}
int main() {
#ifdef WIN32
freopen("a.in", "r", stdin);
#else
#endif
N = read();
for(int i = ; i <= N; i++) {
int a = read(), b = read();
a++; b = N - b;
if(a > b) continue;
if(++mp[MP(a, b)] == ) v[b].push_back(a);
}
for(int i = ; i <= N; i++) {
f[i] = f[i - ];
for(int j = ; j < v[i].size(); j++)
f[i] = max(f[i], f[v[i][j] - ] + min(mp[MP(v[i][j], i)], i - v[i][j] + ));
}
printf("%d", N - f[N]);
return ;
}

BZOJ2298: [HAOI2011]problem a(带权区间覆盖DP)的更多相关文章

  1. 洛谷P2439 [SDOI2005]阶梯教室设备利用(带权区间覆盖)

    题目背景 我们现有许多演讲要在阶梯教室中举行.每一个演讲都可以用唯一的起始和终止时间来确定,如果两个演讲时间有部分或全部重复,那么它们是无法同时在阶级教室中举行的.现在我们想要尽最大可能的利用这个教室 ...

  2. 【POJ3171】Cleaning Shifts 带权区间最小覆盖

    题目大意:给定一个长度为 N 的序列,求带权区间最小覆盖. 题解:设 \(dp[i]\) 表示从左端点到 i 的最小权值是多少,则状态转移为:\(dp[e[i].ed]=min\{dp[j],j\in ...

  3. BZOJ2298 [HAOI2011]problem a 【dp】

    题目 一次考试共有n个人参加,第i个人说:"有ai个人分数比我高,bi个人分数比我低."问最少有几个人没有说真话(可能有相同的分数) 输入格式 第一行一个整数n,接下来n行每行两个 ...

  4. 2019.03.28 bzoj3598: [Scoi2014]方伯伯的商场之旅(带权中位数+数位dp)

    传送门 题意咕咕咕自己读吧挺简单的 思路: 由带权中位数的性质可以得到对于每个数放在每个二进制位的代价一定是个单调或者单峰函数,因此我们先把所有的数都挪到第一个位置,然后依次向右枚举峰点(极值点)把能 ...

  5. BZOJ2298: [HAOI2011]problem a

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2298 题解:刚开始思考的方向错了...一直在想LIS什么的,又发现不合法的情况不好判断,真是个 ...

  6. 【动态规划】bzoj2298: [HAOI2011]problem a

    建模超级妙…… Description 一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低.”问最少有几个人没有说真话(可能有相同的分数) Input 第一行一个整数n,接 ...

  7. [BZOJ2298] [HAOI2011] problem a (dp)

    Description 一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低.”问最少有几个人没有说真话(可能有相同的分数) Input 第一行一个整数n,接下来n行每行两个 ...

  8. P1280 尼克的任务[区间覆盖dp]

    题目描述 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成. 尼克的一个工作日为N分钟,从第一分钟开始 ...

  9. bzoj 2298: [HAOI2011]problem a

    Description 一次考试共有n个人参加,第i个人说:"有ai个人分数比我高,bi个人分数比我低."问最少有几个人没有说真话(可能有相同的分数) Input 第一行一个整数n ...

随机推荐

  1. (C# 正则表达式)判断匹配, 提取字符串或数值

    string s = "if ( \"ch\" == \"os\" ) "; string pattern = @"if\s*\( ...

  2. According to TLD, tag fmt:formatDate must be empty, but is not 问题的解决

    在执行jsp格式化后报错,检查下代码,发现变成如下的样式: <fmt:formatDate value="${cur.sa_date}" pattern="yyyy ...

  3. angularJS articles and resources

    http://antjanus.com/blog/web-development-tutorials/front-end-development/comprehensive-beginner-guid ...

  4. 《C++ Primer Plus》读书笔记之二—复合类型

    二.第四章 复合类型  1.C-风格字符串:C-风格字符串具有一种特殊的性质:以空字符结尾,空字符被写成\0,其ASC||编码为0,用来标记字符串的结尾.例如: char dog[5]={'b','e ...

  5. PHP小错误及分析

    即使是经验丰富的程序猿,在编程的过程中犯个错误也是在所难免的.如果开发人员不能注意到这些错误,也无法了解编译器报错信息的含义,那么这些错误信息不仅毫无用处,还会常常让人感到沮丧,所以更好地理解错误信息 ...

  6. July 16th 2017 Week 29th Sunday

    Opportunities are like sunrises, if you wait too long, you miss them. 机会如同日出,等得太久就会错过. Indecision is ...

  7. selenium 截图加上时间戳

    思路: 1  新建screenshot文件夹,不存在则创建该目录 2  在screenshot文件夹下新建当日日期文件夹,比如20190110:不存在则创建该目录 3  截图保存到当日文件夹,且截图文 ...

  8. 一个几百行代码实现的http服务器tinyhttpd

    /* J. David's webserver */ /* This is a simple webserver. * Created November 1999 by J. David Blacks ...

  9. Android进阶笔记17:Android手机屏幕坐标系

    1. 手机屏幕坐标系: 整个坐标系是以手机屏幕左上角为原点(0,0),如下:

  10. AWESOME SWIFT-swift.libhunt.com-swift类库网站

    https://swift.libhunt.com/categories/688-events 29 Events libraries and projects ORDERED BY POPULARI ...