[SCOI2007] 修车

2023-12-12 16:15
文章标签 scoi2007 修车

本文主要是介绍[SCOI2007] 修车,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[SCOI2007] 修车

题目描述

同一时刻有 \(N\) 位车主带着他们的爱车来到了汽车维修中心。

维修中心共有 \(M\) 位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的。

现在需要安排这 \(M\) 位技术人员所维修的车及顺序,使得顾客平均等待的时间最小。

说明:顾客的等待时间是指从他把车送至维修中心到维修完毕所用的时间。

输入格式

第一行有两个数 \(M,N\),表示技术人员数与顾客数。

接下来 \(N\) 行,每行 \(M\) 个整数。第 \(i+1\) 行第 \(j\) 个数表示第 \(j\) 位技术人员维修第 \(i\) 辆车需要用的时间 \(T_{i,j}\)

输出格式

最小平均等待时间,答案精确到小数点后 \(2\) 位。

样例 #1

样例输入 #1

2 2
3 2
1 4

样例输出 #1

1.50

提示

对于 \(100\%\) 的数据,\(2\le M\le 9\)\(1\le N\le 60\)\(1\le T\le 10^3\)

倒数第 \(i\) 个修的车,他的时间在总等待时间内会被计算 \(i\) 次。

把一个工人拆成 \(n\) 份,表示他倒数第 \(i\) 个修的车。然后给第 \(i\) 个车分配他是 \(k\) 人倒数第 \(j\) 个修的车,流量 1 费用 \(j\times t_{i,k}\)

#include<bits/stdc++.h> 
using namespace std;
const int N=2005,M=300005;
struct edge{int u,v,nxt,f,w;
}e[M];
struct node{int v,w;bool operator<(const node&n)const{return w>n.w;}
};
priority_queue<node>q;
int m,n,p[N],d[N],h[N],hd[N],T,e_num=1,l,r,v[N],t[65][10],ans;
void add_edge(int u,int v,int f,int w)
{e[++e_num]=(edge){u,v,hd[u],f,w};hd[u]=e_num;e[++e_num]=(edge){v,u,hd[v],0,-w};hd[v]=e_num;
}
void spfa()
{static int q[N*N];memset(h,0x7f,sizeof(h));h[q[l=r=1]=0]=0;while(l<=r){for(int i=hd[q[l]];i;i=e[i].nxt){if(e[i].f&&h[e[i].v]>h[q[l]]+e[i].w){h[e[i].v]=h[q[l]]+e[i].w;if(!v[e[i].v])v[q[++r]=e[i].v]=1;}}v[q[l++]]=0;}
}
int dijkstra()
{memset(d,0x7f,sizeof(d));memset(v,0,sizeof(v));d[0]=0;q.push((node){0,0});while(!q.empty()){int k=q.top().v;q.pop();if(v[k])continue;v[k]=1;for(int i=hd[k];i;i=e[i].nxt){if(e[i].f&&d[e[i].v]>d[k]+e[i].w+h[k]-h[e[i].v]){d[e[i].v]=d[k]+e[i].w+h[k]-h[e[i].v];p[e[i].v]=i;q.push((node){e[i].v,d[e[i].v]});}}}return v[T];
}
signed main()
{scanf("%d%d",&m,&n);T=n+n*m+1;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",t[i]+j);for(int i=1;i<=n;i++){add_edge(0,i,1,0);for(int j=1;j<=m;j++)for(int k=1;k<=n;k++)add_edge(i,n+(j-1)*n+k,1,k*t[i][j]);}for(int i=1;i<=n*m;i++)add_edge(n+i,T,1,0);spfa();int s=0;while(dijkstra()){for(int i=0;i<=T;i++)h[i]+=d[i];int mnf=1000000000;for(int i=T;i;i=e[p[i]].u)mnf=min(mnf,e[p[i]].f);for(int i=T;i;i=e[p[i]].u)e[p[i]].f-=mnf,e[p[i]^1].f+=mnf;s+=mnf;ans+=mnf*h[T]; }printf("%.2lf",1.0*ans/n);
}

这篇关于[SCOI2007] 修车的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/485201

相关文章

【C++二分查找】2594. 修车的最少时间

本文涉及的基础知识点 C++二分查找 LeetCode2594. 修车的最少时间 给你一个整数数组 ranks ,表示一些机械工的 能力值 。ranksi 是第 i 位机械工的能力值。能力值为 r 的机械工可以在 r * n2 分钟内修好 n 辆车。 同时给你一个整数 cars ,表示总共需要修理的汽车数目。 请你返回修理所有汽车 最少 需要多少时间。 注意:所有机械工可以同时修理汽车。 示

BZOJ1068: [SCOI2007]压缩(区间DP)

Description   给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中的重复信息。压缩后的字符串除了小 写字母外还可以(但不必)包含大写字母R与M,其中M标记重复串的开始,R重复从上一个M(如果当前位置左边没 有M,则从串的开始算起)开始的解压结果(称为缓冲串)。 bcdcdcdcd可以压缩为bMcdRR,下面是解压缩的过程   另一个例子是abcabcdabcabcdxyx

BZOJ 1066 [SCOI2007]蜥蜴 建模+网络流

Description   在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃 到边界外。 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到平面距离不超过d的任何一个石 柱上。石柱都不稳定,每次当蜥蜴跳跃时,所离开的石柱高度减1(如果仍然落在地图内部,则到达的石柱高度不 变),如果该石柱原来高度为1,则蜥蜴离开后消失。以后其他蜥蜴

【bzoj1072】【SCOI2007】【排列perm】【状压dp】

Description 给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0)。例如123434有90种排列能被2整除,其中末位为2的有30种,末位为4的有60种。 Input 输入第一行是一个整数T,表示测试数据的个数,以下每行一组s和d,中间用空格隔开。s保证只包含数字0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Output 每个

基于Java修车店预约信息系统

基于Java修车店预约信息系统 需求介绍 1、用户注册与登录:用户可以在系统中注册账号并登录,以便进行预约和查看预约状态。 2、预约管理:用户可以在系统中选择修车项目、预约时间和修车店,提交预约请求。系统需要支持预约状态的查询,包括已确认、待审核、已拒绝等状态。 3、车辆信息管理:用户可以录入自己的车辆信息,如车型、车牌号、车辆状态等,以便修车店更好地了解车辆情况。 4、服务管理:修车店

「SCOI2007」 蜥蜴 - 最大流

题目描述 在一个 r r r行 c c c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外。 每行每列中相邻石柱的距离为 1 1 1,蜥蜴的跳跃距离是 d d d,即蜥蜴可以跳到平面距离不超过 d d d的任何一个石柱上。石柱都不稳定,每次当蜥蜴跳跃时,所离开的石柱高度减 1 1 1(如果仍然落在地图内部,则到达的石柱高度不变),如果该石柱原来高度

“独指男”修车谋生十余载 被称坚强哥

今年58岁的岳金,曾和女儿相依为命,后因意外他失去双脚和九根手指,为付医药费,他卖掉房子,将女儿寄养在邻居家,自己流浪街头。03年,他在吉林用七百元钱买了修车工具,开始修车。女儿想把他接过去住,但他坚持不去。“我得用自己的力量活下去。 今年58岁吉林省永吉县农民岳金,曾因一次意外失去了双脚和九根手指。2003年,辗转来到吉林市后,岳金用身上仅有的七百元钱买了一些修车工具,依靠自己的劳动赚钱生存,

【修车案例】一波形一案例(9)

故障车型:捷豹X-Type 故障现象:发动机故障指示灯点亮,加速时动力不足,扫描工具显示EGR阀和涡轮增压器增压控制位置传感器电路故障 示波器诊断:检测增压控制位置传感器电路的完整性  A通道 - 增压控制执行电机电源电压B通道 - 增压控制执行电机接地电压C通道 - 电流钳捕获电机相电流 故障分析:波形存在大量噪声毛刺,电机运行期间多次出现不规则的电压降,因此电路完整性或电机

【修车案例】一波形一案例(11)

故障车型:2013款宝马320旅行版 故障现象:发动机警告灯亮起,加速无力等,发动机冷却后车辆能够正常运行,直到温度升高,故障重现。 故障码:25D100增压压力传感器对地短路;27F100增压空气软管故障。 示波器诊断:用示波器同时捕获增压压力传感器电源线、接地线、信号线; A通道- 5V电源线B通道- GND接地线C通道- 信号线 故障分

【修车案例】一波形一案例(8)

背景介绍:有客户问到如果气缸盖垫片失效,冷却液压力应该会有明显上升,用虹科Pico示波器怎么做这个诊断?我们找到一辆气缸盖垫片和冷却套坏了的丰田AD发动机进行测试分析。     示波器诊断:  A通道 - WPS500X压力传感器测冷却液压力B通道 - 曲轴传感器C通道 - 1缸喷油嘴电流D通道 - 起动电流   故障分析:起动后没多久,冷却液压力出现波动频率非常大的一段