P2053 [SCOI2007]修车

本文介绍了一种通过构建费用流模型解决最小平均等待时间问题的方法,适用于技术人员按最优顺序修理多辆车的情况,确保整体等待时间最短。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

传送门

求最小平均等待时间就相当于求最小总等待时间

考虑对于一个技术人员的修车顺序,$k_1,k_2,k_3,...,k_p$

这 $p$ 辆车的车主的等待时间分别为 $t_{k_1},t_{k_1}+t_{k_2},t_{k_1}+t_{k_2}+t_{k_3},...,t_{k_1}+t_{k_2}+t_{k_3}+...+t_{k_p}$

把同种的 $t$ 放在一起,考虑每种 $t$ 的贡献:$t_{k_1}*p,t_{k_2}*(p-1),t_{k_3}*(p-2),...,t_{k_p}*1$

可以发现,如果车 $x$ 在修车顺序中为 $y$,总修车数为 $p$,那么 $x$ 的贡献就是 $t_x*(p-y+1)$

倒过来,如果 $x$ 在倒过来的修车顺序中为 $y$,总修车数为 $p$,那么 $x$ 的贡献就是 $t_x*y$

考虑构建这样一个费用流模型, $m$ 个技术人员拆成 $n$ 个点,每辆车往所有这些点连边,

车 $x$ 连向第 $i$ 个技术人员的第 $j$ 个点的边表示,车 $x$ 可以选择让第 $i$ 个人倒数第 $j$ 个修

那么对于每辆车 $x$ , $S$ 向 $x$ 连一条流量为 $1$,费用为 $0$ 的边,表示这种车只有一辆

每辆车 $x$ 向所有技术人员的 $m*n$ 个点 $y$(设此点表示第 $i$ 个人倒数第 $j$ 个修 )连边,流量为 $1$,费用为 $cst[i][x]*j$($cst[i][x]$ 表示第 $i$ 个人修第 $x$ 辆车需要的时间)

对于所有技术人员的 $m*n$ 个点,向 $T$ 一条流量为 $1$,费用 $0$ 的边

然后最小费用最大流就是答案了

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
using namespace std;
typedef long long ll;
inline int read()
{
    int x=0,f=1; char ch=getchar();
    while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
    while(ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
    return x*f;
}
const int N=2e5+7,INF=1e9+7;
int fir[N],from[N<<1],to[N<<1],val[N<<1],cst[N<<1],cntt=1;
inline void add(int a,int b,int c,int d)
{
    from[++cntt]=fir[a]; fir[a]=cntt;
    to[cntt]=b; val[cntt]=c; cst[cntt]=d;
    from[++cntt]=fir[b]; fir[b]=cntt;
    to[cntt]=a; val[cntt]=0; cst[cntt]=-d;
}
int mif[N],pre[N],dis[N],S,T;
bool inq[N];
queue <int> q;
bool BFS()
{
    for(int i=S;i<=T;i++) dis[i]=INF;
    q.push(S); dis[S]=0; inq[S]=1; mif[S]=INF;
    while(!q.empty())
    {
        int x=q.front(); q.pop(); inq[x]=0;
        for(int i=fir[x];i;i=from[i])
        {
            int &v=to[i]; if( !val[i] || dis[v]<=dis[x]+cst[i] ) continue;
            dis[v]=dis[x]+cst[i]; pre[v]=i;
            mif[v]=min(mif[x],val[i]);
            if(!inq[v]) q.push(v),inq[v]=1;
        }
    }
    return dis[T]<INF;
}
int ans;
void upd()
{
    for(int now=T,i=pre[T]; now!=S; now=to[i^1],i=pre[now])
        val[i]-=mif[T],val[i^1]+=mif[T];
    ans+=mif[T]*dis[T];
}

int m,n,nm;
int main()
{
    m=read(),n=read(); int t;
    nm=n*m; S=0,T=nm+n+1;
    for(int i=1;i<=n;i++) add(S,nm+i,1,0);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            t=read();
            for(int k=1;k<=n;k++)
                add(nm+i,(j-1)*n+k,1,t*k);
        }
    for(int i=1;i<=m;i++)
        for(int j=1;j<=n;j++) add((i-1)*n+j,T,1,0);
    while(BFS()) upd();
    printf("%.2lf",1.0*ans/n);
    return 0;
}

 

转载于:https://www.cnblogs.com/LLTYYC/p/10761486.html

内容概要:《中文大模型基准测评2025年上半年报告》由SuperCLUE团队发布,详细评估了2025年上半年中文大模型的发展状况。报告涵盖了大模型的关键进展、国内外大模型全景图及差距、专项测评基准介绍等。通过SuperCLUE基准,对45个国内外代表性大模型进行了六大任务(数学推理、科学推理、代码生成、智能体Agent、精确指令遵循、幻觉控制)的综合测评。结果显示,海外模型如o3、o4-mini(high)在推理任务上表现突出,而国内模型如Doubao-Seed-1.6-thinking-250715在智能体Agent和幻觉控制任务上表现出色。此外,报告还分析了模型性价比、效能区间分布,并对代表性模型如Doubao-Seed-1.6-thinking-250715、DeepSeek-R1-0528、GLM-4.5等进行了详细介绍。整体来看,国内大模型在特定任务上已接近国际顶尖水平,但在综合推理能力上仍有提升空间。 适用人群:对大模型技术感兴趣的科研人员、工程师、产品经理及投资者。 使用场景及目标:①了解2025年上半年中文大模型的发展现状与趋势;②评估国内外大模型在不同任务上的表现差异;③为技术选型和性能优化提供参考依据。 其他说明:报告提供了详细的测评方法、评分标准及结果分析,确保评估的科学性和公正性。此外,SuperCLUE团队还发布了多个专项测评基准,涵盖多模态、文本、推理等多个领域,为业界提供全面的测评服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值