就相当于第一个在一工厂加工完花了 1 时间,第二个在二工厂加工完花了 1 时间,第三个在一工厂要等第一个做完再做,花了 2 时间,所以总共花了 4 时间,平均花了1.333333
假设一个工厂里有num个玩具来加工,则在该工厂所花的时间为 T = num * t_1 + (num - 1) * t_2 +…+1 * t_num(t_第几个制作)
我们把一个工厂拆开来看,把 M 个拆成 M * N 个(因为 num <= N ), i * N + j 个工厂,相当于第 i 个工厂中第 num - j + 1 个制作玩具,即该工厂倒数第 j 个制作玩具
然后我们设置一个超级源点,连接 N 个玩具,边的容量为1,费用为0,这样便限制了一个玩具只能制造一次
再设置一个超级汇点,连接 N * M 个工厂,边的容量为1,费用为0,这样限制了一个工厂不会同时生产两个玩具
再把 N 个玩具和 N * M 个工厂分别相连( i * N + j ), 边的容量为0,费用为 制造时间 * j,这样当最大流为N时,M个工厂都能正确的得到生产时间,也就能正确得到生产总时间
(需要注意,由于我们求的时最小费用流,所以当 j 存在较小的没有使用时,是不会使用较大的,因为这样的 制造时间 * j 更小,所以这样可以导致我们的一个工厂拆开的 j 个工厂,相当于 j 从小到大被连接,这样相当于把 T = num * t_1 + (num - 1) * t_2 +…+1 * t_num 倒过来考虑了,是符合题意的)
套最小费用流模板,把最后得到的值除以 N 即可。
#include
#include <stdio.h>
#include
#define INF 1000000005
using namespace std;
int n, m;
int data[55][55];
struct edge
{
int to, cap, coust, rev;
edge(int t, int c, int s, int r)
{
to = t; cap = c; coust = s; rev = r;
}
};
vector ddd[3005];
int dist[3005];
int prev[3005];
int prep[3005];
void add_edge(int from, int to, int cap, int coust)
{
ddd[from].push_back(edge(to, cap, coust, ddd[to].size()));
ddd[to].push_back(edge(from, 0, -coust, ddd[from].size() - 1));
}
int min_coust(int from, int to, int flow)
{
int res = 0;
while(flow > 0)
{
fill(dist, dist + n + n * m + 2, INF);
dist[from] = 0;
bool flag = true;
while(flag)
{
flag = false;
for(int i = 0; i < n + n * m + 2; i++)
{
if(dist[i] != INF)
{
for(int j = 0; j < ddd[i].size(); j++)
{
struct edge e = ddd[i][j];
if(e.cap != 0 && dist[i] + e.coust < dist[e.to])
{
flag = true;
dist[e.to] = dist[i] + e.coust;
prev[e.to] = i;
prep[e.to] = j;
}
}
}
}
}
int d = flow;
for(int i = to; i != from; i = prev[i])
{
d = min(d, ddd[prev[i]][prep[i]].cap);
}
for(int i = to; i != from; i = prev[i])
{
ddd[prev[i]][prep[i]].cap -= d;
ddd[i][ddd[prev[i]][prep[i]].rev].cap += d;
}
res = res + dist[to] * d;
flow = flow - d;
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
![](https://img-blog.csdnimg.cn/img_convert/0b34de441595d2f6f6e3ef2935842230.jpeg)
最后
给大家分享一些关于HTML的面试题,有需要的朋友可以戳这里免费领取,先到先得哦。
最后
给大家分享一些关于HTML的面试题,有需要的朋友可以戳这里免费领取,先到先得哦。
[外链图片转存中…(img-u0P7ld73-1712198748196)]
[外链图片转存中…(img-XSBbmM8I-1712198748196)]