• 业务办理


    这里写图片描述
    这里写图片描述

    仔细分析,发现要使最大不满意度最小,排队顺序应该是按照最长等待时间来排。
    如果不是这样,交换任意两个人的位置,那么这两个人等待时间的最大值一定比原来大。
    所以这样排的正确性显然。

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #define LL long long
    #define M 100009
    using namespace std;
    int n;
    LL ans,tot;
    struct H{int t,d;}per[M];
    bool cmp(H x,H y)
    {
        if(x.d==y.d) return x.t<y.t;
        return x.d<y.d;
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++) scanf("%d",&per[i].t);
        for(int i=1;i<=n;i++) scanf("%d",&per[i].d);
        sort(per+1,per+n+1,cmp);
        for(int i=1;i<=n;i++)
        {
            tot+=per[i].t;
            ans=max(ans,tot-per[i].d);
        }
        printf("%lld",ans);
        return 0;
    }

    下面是暴力对拍程序
    求一下全排列。

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #define LL long long
    #define M 100009
    using namespace std;
    int n,num[M],d[M],t[M];
    LL ans,tot,minn=1e18;
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++) scanf("%d",&t[i]);
        for(int i=1;i<=n;i++) scanf("%d",&d[i]);
        for(int i=1;i<=n;i++) num[i]=i;
        while(1)
        {
            tot=0;ans=0;
            for(int i=1;i<=n;i++)
            {
                tot+=t[num[i]];
                ans=max(ans,tot-d[num[i]]);
            }
            minn=min(minn,ans);
            if(!next_permutation(num+1,num+n+1)) break;
        }
        printf("%lld",minn);
    }
  • 相关阅读:
    on和where的区别
    分组查询 group by having 排序 order by asc(升序)或desc(降序)
    连接查询 left join on, union
    md5加密方法
    where查询条件的指定,between and,in,like
    Mapnix(转) Anny
    Rolebased access control(RBAC) Anny
    TestComplete如何识别对象(转) Anny
    Jira workflow Anny
    crx文件 Anny
  • 原文地址:https://www.cnblogs.com/dfsac/p/7587810.html
Copyright © 2020-2023  润新知