zoukankan      html  css  js  c++  java
  • HDU非诚勿扰

    这题用匈牙利算法是无论如何也过不了的,边太多了。

    利用简单的贪心规则,我们每次选取最优的匹配方案来进行匹配,在划分上我们采用工资要求为负值的去寻找工资要求为正值的人。对于一个要求工资比他低的男人来说,其实就是优先最有钱的男人,因为能与之匹配的女生是最多的,在选取女生的时候,就选择满足要求下工资最高的女生,因为这种女生最难满足要求,这一对配对对后面的匹配来说是最优的。女生同理。

    代码如下:

    #include <cstring>
    #include <cstdio>
    #include <cstdlib>
    #include <algorithm>
    #define MAXN 100005
    using namespace std;
    
    int N, bl[MAXN], bh[MAXN], gl[MAXN], gh[MAXN];
    
    int idx[5];
    
    bool cmp(int a, int b)
    {
        return a > b;
    }
    
    int solve()
    {
        int ptr = 1, ret = 0;
        sort(bl+1, bl+1+idx[0], cmp);
        sort(bh+1, bh+1+idx[1], cmp);
        sort(gl+1, gl+1+idx[2], cmp);
        sort(gh+1, gh+1+idx[3], cmp);
        for (int i = 1; i <= idx[0]; ++i) {
            for ( ; ptr <= idx[3]; ++ptr) {
                if (bl[i] > gh[ptr]) {
                    ++ptr, ++ret;
                    break;
                }
            }
        }
        ptr = 1;
        for (int i = 1; i <= idx[2]; ++i) {
            for ( ; ptr <= idx[1]; ++ptr) {
                if (gl[i] > bh[ptr]) {
                    ++ptr, ++ret;
                    break;
                }
            }
        }
        return ret;
    }
    
    int main()
    {
        int T, c;
        scanf("%d", &T);
        while (T--) {
            memset(idx, 0, sizeof (idx));
            scanf("%d", &N);
            for (int i = 1; i <= N; ++i) {
                scanf("%d", &c);
                if (c < 0) {
                    bl[++idx[0]] = -c;
                }
                else {
                    bh[++idx[1]] = c;
                }
            }  
            for (int i = 1; i <= N; ++i) {
                scanf("%d", &c);
                if (c < 0) {
                    gl[++idx[2]] = -c;
                }
                else {
                    gh[++idx[3]] = c;
                }
            }
            printf("%d\n", solve());
        }
        return 0;
    }
  • 相关阅读:
    一个简单的aJax——后台用servlet技术
    js获取项目根路径
    在SpringMVC利用MockMvc进行单元测试
    java.lang.NoSuchMethodError: javaxservlet.http.HttpServletRequest.isAsyncStarted()Z
    保利威视点播集成
    微信登录后返回微信名等信息
    极光推送发送控制/别名/取值
    每天首次登陆记录设备信息
    获取APK签名
    权限管理AppOpsManager
  • 原文地址:https://www.cnblogs.com/Lyush/p/2617698.html
Copyright © 2011-2022 走看看