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

题解:首先,由每个人说的话的内容,我们可以理解为他处在ai+1,n-bi这个区间(分数段)内,且这个区间每个人的分数相等;

有n个这样的区间,可以看出,交叉的区间不能一起选,完全相同的区间可以一起选;

这样我们把相同的区间数目求出来作为这个区间的权值,这个问题就成了带权的选择权值之和最大的不相交的区间问题;

利用动态规划解决即可;

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<string>
  5. #include<ctime>
  6. #include<algorithm>
  7. #include<cstdlib>
  8. #include<map>
  9. #include<set>
  10. #include<vector>
  11. #include<queue>
  12. #include<cmath>
  13. using namespace std;
  14. #define FILE "a"
  15. #define LL long long
  16. #define up(i,j,n) for(int i=j;i<=n;i++)
  17. #define pii pair<int,int>
  18. #define piii pair<int,pii >
  19. template<typename T> inline bool chkmin(T &a,T b){return a>b?a=b,true:false;}
  20. template<typename T> inline bool chkmax(T &a,T b){return a<b?a=b,true:false;}
  21. namespace IO{
  22. char *fs,*ft,buf[<<];
  23. inline char gc(){return (fs==ft&&(ft=(fs=buf)+fread(buf,,<<,stdin),fs==ft))?:*fs++;}
  24. inline int read(){
  25. LL x=;int ch=gc();bool f=;
  26. while(ch<''||ch>''){if(ch=='-')f=;ch=gc();}
  27. while(ch<=''&&ch>=''){x=(x<<)+(x<<)+ch-'';ch=gc();}
  28. return f?-x:x;
  29. }
  30. }using namespace IO;
  31. namespace OI{
  32. const int maxn();
  33. struct node{
  34. int x,y;
  35. bool operator<(const node &b)const{return x<b.x||(x==b.x&&y<b.y);}
  36. bool operator==(const node &b){return x==b.x&&y==b.y;}
  37. }a[maxn];
  38. int n,f[maxn];
  39. struct Node{
  40. int y,v,next;
  41. }e[maxn];
  42. int linkk[maxn],len=;
  43. void insert(int x,int y,int v){
  44. e[++len].y=y;
  45. e[len].next=linkk[x];
  46. linkk[x]=len;
  47. e[len].v=v;
  48. }
  49. void slove(){
  50. n=read();
  51. up(i,,n)a[i].x=read()+,a[i].y=n-read();
  52. sort(a+,a+n+);
  53. up(i,,n){
  54. int j=i,v;
  55. while(a[j+]==a[i])j++;
  56. v=j-i+;
  57. if(a[i].y-a[i].x+<v)v=a[i].y-a[i].x+;
  58. insert(a[i].x,a[i].y,v);
  59. i=j;
  60. }
  61. up(i,,n){
  62. chkmax(f[i],f[i-]);
  63. for(int j=linkk[i];j;j=e[j].next)chkmax(f[e[j].y],f[i-]+e[j].v);
  64. }
  65. printf("%d\n",n-f[n]);
  66. }
  67. }
  68. int main(){
  69. freopen(FILE".in","r",stdin);
  70. freopen(FILE".out","w",stdout);
  71. using namespace OI;
  72. slove();
  73. return ;
  74. }

[haoi2011]a的更多相关文章

  1. BZOJ2301: [HAOI2011]Problem b[莫比乌斯反演 容斥原理]【学习笔记】

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 4032  Solved: 1817[Submit] ...

  2. bzoj 2301: [HAOI2011]Problem b

    2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MB Submit: 3757 Solved: 1671 [Submit] ...

  3. 【BZOJ 2300】 2300: [HAOI2011]防线修建 (动态凸包+set)

    2300: [HAOI2011]防线修建 Description 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可是A国上 ...

  4. HAOI2011 problem b

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 1047  Solved: 434[Submit][ ...

  5. BZOJ 2298: [HAOI2011]problem a 动态规划

    2298: [HAOI2011]problem a Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnli ...

  6. BZOJ 2301: [HAOI2011]Problem b 莫比乌斯反演

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 1007  Solved: 415[Submit][ ...

  7. 2301: [HAOI2011]Problem b

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 4164  Solved: 1888[Submit] ...

  8. BZOJ 2300: [HAOI2011]防线修建( 动态凸包 )

    离线然后倒着做就变成了支持加点的动态凸包...用平衡树维护上凸壳...时间复杂度O(NlogN) --------------------------------------------------- ...

  9. BZOJ 2302: [HAOI2011]Problem c( dp )

    dp(i, j)表示从i~N中为j个人选定的方案数, 状态转移就考虑选多少人为i编号, 然后从i+1的方案数算过来就可以了. 时间复杂度O(TN^2) ------------------------ ...

  10. BZOJ 2301: [HAOI2011]Problem b( 数论 )

    和POI某道题是一样的...  http://www.cnblogs.com/JSZX11556/p/4686674.html 只需要二维差分一下就行了. 时间复杂度O(MAXN + N^1.5) - ...

随机推荐

  1. 通过房价预测入门Kaggle

    今天看了个新闻,说是中国社会科学院城市发展与环境研究所及社会科学文献出版社共同发布<房地产蓝皮书:中国房地产发展报告No.16(2019)>指出房价上涨7.6%,看得我都坐不住了,这房价上 ...

  2. ionic build Android错误记录 error in opening zip file

    0.写在前头 运行 :cordova requirements Requirements check results for android: Java JDK: installed 1.8.0 An ...

  3. 【jar】JDK将单个的java文件打包为jar包,并引用到项目中使用【MD5加密】

    ==================================================================================================== ...

  4. mysql 存储过程时间月份减法

    declare startTime VARCHAR(19) default '2014-00-00 00:00:00'; declare tempTime VARCHAR(19) default NO ...

  5. Surrounded Regions 包围区域——dfs

    Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captured ...

  6. c# 时间相关

    1.求时间差,两种方式(时间是否小于1800秒) 第一种: DateTime startTime = DateTime.Now; ... DateTime.Now.Subtract(startTime ...

  7. [RFC] Simplifying kernel configuration for distro issues

    http://lwn.net/Articles/507276/ From: Linus Torvalds <torvalds-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b-A ...

  8. SGPIO

    http://en.wikipedia.org/wiki/SGPIO SGPIO From Wikipedia, the free encyclopedia   Serial General Purp ...

  9. 虚拟网卡TUN/TAP 驱动程序设计原理

    昨天韦哥写了<Linux下Tun/Tap设备通信原理>一文,只提到了两个使用Tun的用户进程之间的通信路径,并没有说明Tun虚拟网卡驱动是如何实现的,而正好看到了这里的一篇讲解这方面的文章 ...

  10. 错误 1 error C1083: 无法打开包括文件: “numpy/arrayobject.h”: No such file

    问题:错误 1 error C1083: 无法打开包括文件: “numpy/arrayobject.h”: No such file 解答:加入include路径:E:\env\Anaconda2x6 ...