洛谷 P1251 餐巾计划问题 (费用流)网络流24题(3)

洛谷 P1251 餐巾计划问题 (费用流)网络流24题(3)

链接
题意:有一个餐厅,每天需要一定数量的餐巾 x [ i ] x[i] x[i],每天可以购买餐巾,花费 p p p,或者送清洗店,花费 d a y 1 day_1 day1 c o s t 1 cost_1 cost1或者 d a y 2 day_2 day2 c o s t 2 cost_2 cost2,除了 x x x,对于每一天其他变量都是一样的
思路:我们考虑把每一天拆点,分成早上和晚上,记早上是 i i i,晚上是 i ′ i' i
1.对于每一天,我们可以购买,所以直接连接 s → i ( I N F , p ) s\to i (INF,p) si(INF,p),代表购买
2.因为每一天需要使用 x [ i ] x[i] x[i],所以我们还需要连接每一天到汇点,由于晚上的毛巾代表的是脏毛巾,所以我们要连接的是 i → t ( x [ i ] , 0 ) i\to t(x[i],0) it(x[i],0)
3.因为每天会产生 x [ i ] x[i] x[i]的脏毛巾,我们感性考虑应该是从 i → i ′ ( x [ i ] , 0 ) i\to i'(x[i],0) ii(x[i],0),但是这是不对的,因为这样一来我们就需要每天有 2 ∗ x [ i ] 2*x[i] 2x[i]的毛巾才能满足到汇点和到 i ′ i' i的流量,所以我们直接 s → i ′ ( x [ i ] , 0 ) s\to i'(x[i],0) si(x[i],0)
4.每一天,我们可以送至两个洗衣店,所以我们可以把每天晚上脏毛巾送至 i + d a y 1 / 2 i+day_{1/2} i+day1/2的干净毛巾,有 i ′ → i + d a y 1 / 2 ( I N F , c o s t 1 / 2 ) i'\to i+day_{1/2}(INF,cost_{1/2}) ii+day1/2(INF,cost1/2)
5.我们可以累计毛巾,所以我们选择留脏毛巾,或者干净毛巾,效果是一样的,因为每天购买的价格一样,我选择留脏毛巾,有 i ′ → ( i + 1 ) ′ ( I N F , 0 ) i'\to (i+1)'(INF,0) i(i+1)(INF,0)

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 4e3+15, INF = 0x3f3f3f3f3f3f3f3f;
int head[N], idx = 1;
struct Edge{int to, nxt, d, c;}e[10000010];
void add(int u, int v, int d, int c)
{
    e[++idx].to = v, e[idx].nxt = head[u], head[u] = idx, e[idx].d = d, e[idx].c = c;
    e[++idx].to = u, e[idx].nxt = head[v], head[v] = idx, e[idx].d = 0, e[idx].c = -c;
}
int n, p, m, f, n1, s1;
int dis[N], inq[N], incf[N], pre[N], s, t, maxflow, mincost;

bool spfa()
{
    queue<int> Q;
    memset(dis, 0x3f, sizeof (dis));
    memset(inq, 0, sizeof (inq));
    Q.push(s);
    dis[s] = 0;
    inq[s] = 1;
    incf[s] = INF;
    while (!Q.empty()) {
        int u = Q.front(); Q.pop();
        inq[u] = 0;
        for (int i = head[u]; i; i = e[i].nxt) {
            if (!e[i].d) continue;
            int v = e[i].to, d = e[i].c;
            if (dis[v] > dis[u] + d) {
                dis[v] = dis[u] + d;
                incf[v] = min(incf[u], e[i].d);
                pre[v] = i;
                if (!inq[v]) {inq[v] = 1; Q.push(v);}
            }
        }
    }
    return dis[t] != 0x3f3f3f3f3f3f3f3f;
}

int MCMF()
{
    while (spfa()) {
        int x = t;
        maxflow += incf[t];
        mincost += dis[t] * incf[t];
        int i;
        while (x != s) {
            i = pre[x];
            e[i].d -= incf[t];
            e[i ^ 1].d += incf[t];
            x = e[i ^ 1].to;
        }
    }return mincost;
}

signed main()
{
    cin >> n;
    t = n + n + 10;
    for (int i = 1; i <= n; i++) {
        int x; cin >> x;
        add(i, t, x, 0);
        add(s, i + n, x, 0);
    }
    cin >> p >> m >> f >> n1 >> s1;
    for (int i = 1; i <= n; i++) {
        add(s, i, INF, p);
        if (i != n) add(i + n, i + 1 + n, INF, 0);
        if (i + m <= n) add(i + n, i + m, INF, f);
        if (i + n1 <= n) add(i + n, i + n1, INF, s1);
    }
    cout << MCMF();
    return 0;
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 工业视觉填空是一种常见的考察工业视觉技术掌握程度的测试方式。填空通常给出一张或多张包含目标物体或场景的图像,要求我们根据图像提供的信息填写空缺的部分。 在面对这类目时,我们需要注意以下几点。 首先,要仔细观察图像中的目标物体或场景。通过观察可以获取关于目标物体的形状、颜色、纹理等信息。同时,还需要注意图像中目标物体的位置、大小和角度等细节。 其次,根据观察到的信息进行推理。通过分析目标物体的特征,可以推测出填写在空缺处的相关信息。例如,如果图像中是一张餐桌,空缺处可能是餐盘或餐巾纸等与餐桌相关的物品。 此外,我们还可以利用已知的规则、常识和经验来进行推断。工业视觉填空通常涉及到工业生产过程中的各种物体和场景,我们可以结合自己的相关知识,推断出最合理的填空答案。 最后,需要小心排除干扰项。有时候,在填空中会出现一些与目标物体相似或具有迷惑性的选项,我们要尽量将这些选项排除在外,选出最符合实际情况的答案。 总之,工业视觉填空是一个考验观察力和推理能力的型。通过仔细观察、合理推理和排除干扰项,我们可以更准确地解答这类目。 ### 回答2: 工业视觉是一种通过计算机视觉技术实现的机器视觉应用,主要用于工业生产线上对产品进行检测、识别和定位等任务。而“bing”在这个背景下是一种用于填充空缺的技术。 工业视觉填空 bing 是指在工业视觉应用中,通过使用计算机视觉算法来填充图像中的空缺或缺失的信息。这些空缺可能是由于摄像机视野受限或者物体表面的纹理不规则等因素引起的。填空 bing 的目的是通过算法分析和处理,准确地还原出缺失的信息,从而达到检测和识别的目的。 在工业生产线上,工业视觉填空 bing 可以应用于多个领域。例如,在电子产业中,当产品经过视觉检测系统时,可能会出现一些零件的脱落或者损坏,这样就会导致图像中出现缺失的区域。通过填空 bing 技术,可以将这些缺失的区域补全,从而准确地检测出产品的质量。 另外,在制造业中,工业视觉填空 bing 也可以应用于产品定位。当生产线上的机器需要精确地将零件组装在一起时,完整的视觉信息是非常重要的。如果零件的某些部分无法被视觉系统检测到,就会导致产品组装的错误或者不准确。通过填空 bing 技术,可以将缺失的信息修复,确保产品的正确定位和组装。 综上所述,工业视觉填空 bing 是一种工业视觉应用中的算法技术,主要用于对图像中的缺失信息进行补全,以实现精确的产品检测和定位。通过填空 bing 技术,可以提高工业生产线上的自动化程度,提高产品质量和生产效率。 ### 回答3: 工业视觉是一种基于计算机视觉技术的应用,主要用于自动化生产中的检测、识别和测量等任务。它可以帮助提高生产效率、确保产品质量,减少人工错误和成本。在工业视觉中,填空是一种常见的测试方式,用于检测产品或生产过程中的缺陷或异常。 填空在工业视觉中的应用通常包括以下几个方面: 首先,填空可以用于产品的外观缺陷检测。通过对产品外观的图像进行分析,识别出可能存在的缺陷或异常,如表面破损、划痕或涂层不均匀等。这可以帮助生产线上的工作人员快速发现问题,及时进行修复或处理,保证产品质量。 其次,填空可以用于零件的正确安装和组装。通过对零件或组件的图像进行分析,检查是否存在缺失或错误安装的情况。例如,可以通过填空来检测汽车装配线上的螺丝是否正确安装,以及电子产品中各个元件的位置是否准确。这可以帮助避免产品在使用过程中发生故障或损坏。 此外,填空还可以用于产品尺寸的测量和判断。通过对产品图像进行分析,测量其尺寸并与标准进行比较,判断是否符合规定要求。例如,可以通过填空来检测零件的长度、直径或厚度是否在允许的范围内。这可以帮助发现生产过程中的偏差,及时调整生产参数,保证产品质量一致性。 综上所述,填空在工业视觉中的应用可以帮助实现生产过程的自动化和智能化,提升生产效率和产品质量。通过对产品外观、安装和尺寸等进行识别和测量,填空可以帮助企业实现更精确、更可靠的生产。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值