zoukankan      html  css  js  c++  java
  • SGU 199

    要邀请n个人参加party,每个人有力量值strength Si和魅力值 beauty Bi,如果存在两人S i ≤ S j and B i ≥ B j 或者  S i ≥ S j and B i ≤ B j 他们两个会产生冲突,问在不产生冲突的条件下,最多能邀请到几个人?

    【LIS】一开始将所有人按照Si升序排序,Si相同的按照Bi值降序排列,在这个基础上答案就是Bi的最长上升子序列的长度。

    为什么Si相同时按照Bi值降序排列?

    由求出的子序列时严格递增序列,如果对于相同的Si,Bi是递增,那么可能会取到两个数Si=Sj,Bi<=Bj,显然是不满足条件的。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<iostream>
    #include<algorithm>
    #include<set>
    #include<map>
    #include<stack>
    #include<vector>
    #include<queue>
    #include<string>
    #include<sstream>
    #define eps 1e-9
    #define ALL(x) x.begin(),x.end()
    #define INS(x) inserter(x,x.begin())
    #define FOR(i,j,k) for(int i=j;i<=k;i++)
    #define MAXN 1005
    #define MAXM 40005
    #define INF 0x3fffffff
    using namespace std;
    typedef long long LL;
    int i,j,k,n,m,x,y,T,ans,big,cas,num,len;
    bool flag;
    
    struct node
    {
        int s,b,i;
    }p[100005];
    
    int dp[100005],nam[100005],pre[100005];
    
    bool cmp(node x,node y)
    {
        if (x.s==y.s) return x.b>y.b;
        return x.s<y.s;
    }
    
    void out(int u)
    {
         if (pre[u]) out(pre[u]);
         
         printf("%d ",p[u].i);
    }
    
    int main()
    {
        scanf("%d",&n);
        for (i=1;i<=n;i++)
        {
            scanf("%d%d",&p[i].s,&p[i].b);
            p[i].i=i;
        }
        sort(p+1,p+1+n,cmp);
        
        num=0;
        for (i=1;i<=n;i++)//求最长上升子序列
        {
            if (p[i].b>dp[num])
            {
                dp[++num]=p[i].b;
                nam[num]=i;//用于输出
                pre[i]=nam[num-1];//用于输出
            }else
            {
                k=lower_bound(dp+1,dp+1+num,p[i].b)-dp; 
                dp[k]=p[i].b;
                
                nam[k]=i;//用于输出
                pre[i]=nam[k-1];//用于输出
            }
        }
        
        printf("%d
    ",num);
        out(nam[num]);
        printf("
    ");
        return 0;
    }
  • 相关阅读:
    innodb文件
    Innodb 存储引擎
    第二章 flex输入输出结构
    第二章 flex输入输出
    第二章 flex处理二义性
    第一章 flex单词计数程序
    Compile SQLite3 from individual files
    标 题: [心得]传统IT转互联网面试经验分享
    【设计模式】二:策略模式
    python 爬虫第三例--爬美女图片
  • 原文地址:https://www.cnblogs.com/zhyfzy/p/4285459.html
Copyright © 2011-2022 走看看