• BZOJ 2298 problem a(区间DP)


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

    思路:考虑最多有多少人说真,那么答案就是n-max.

    ai个人分数比他高,bi个人分数比他低,说明[bi+1,n-ai]里面的人分数相同。

    用map维护某个区间是否相同.

     1 #include<algorithm>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<cstring>
     5 #include<iostream>
     6 #include<vector>
     7 #include<map>
     8 int f[200005];
     9 std::map<std::pair<int,int>,int>mp;
    10 std::vector<int>v[200005];
    11 int n;
    12 int main(){
    13     scanf("%d",&n);
    14     for (int i=1;i<=n;i++){
    15         int x,y;
    16         scanf("%d%d",&x,&y);
    17         int L=x+1,R=n-y;
    18         if (L>R) continue;
    19         if (mp.count(std::make_pair(L,R))){
    20             if (mp[std::make_pair(L,R)]<R-L+1)
    21              mp[std::make_pair(L,R)]++;
    22         }else{
    23             
    24             mp[std::make_pair(L,R)]=1;
    25             v[R].push_back(L);
    26         }
    27     }
    28     
    29     for (int i=1;i<=n;i++){
    30         std::vector<int>::iterator j;
    31         f[i]=f[i-1];
    32         for (j=v[i].begin();j!=v[i].end();j++){
    33             int t=*j;
    34             f[i]=std::max(f[i],f[t-1]+mp[std::make_pair(t,i)]);
    35         }
    36     }
    37     printf("%d
    ",n-f[n]);
    38 }
  • 相关阅读:
    第一阶段站立会议4
    第一阶段站立会议3
    用户场景描述
    第一阶段站立会议2
    第一阶段站立会议1
    第七周进度条
    第十二周工作总结
    寻找水王
    第十一周工作总结
    构建之法阅读笔记05
  • 原文地址:https://www.cnblogs.com/qzqzgfy/p/5553798.html
Copyright © 2020-2023  润新知