精华内容
下载资源
问答
  • 传统设计方法的电网运行损耗控制系统,由于设置的限制条件较为单一,导致抗干扰性差,控制系统运行失稳,影响对电网运行损耗的控制效果,因此在考虑安全约束条件前提下,设计新的电网运行损耗优化控制系统。...
  • 一个被越来越多地用来研究人员组织如何使用信息系统以及信息系统的使用如何影响个人,组织及其绩效的框架,我们称之为“技术负担和约束理论”(TACT)。 TACT的基本前提是,要了解信息系统的用途后果,必须考虑...
  • 差分约束系统学习笔记

    千次阅读 多人点赞 2018-05-08 21:03:21
    差分约束系统 一、预备知识 最短路基本性质 #define inf 0x3fffffff #define M 1005 //最大点数 struct edge{ int v, w, next; }e[10005]; //估计好有多少条边 int pre[M], cnt, dist[M], n; bool inq[M...

    一、预备知识

    最短路基本性质
    #define inf 0x3fffffff
    #define M 1005	//最大点数
    
    struct edge{
        int v, w, next;
    }e[10005];		//估计好有多少条边
    
    int pre[M], cnt, dist[M], n;
    bool inq[M];
    //注意初始化
    void init ()
    {
        cnt = 0;
        memset (pre, -1, sizeof(pre));
    }
    //注意双向加边 
    void addedge (int u, int v, int w)    //加边函数,慢慢模拟就会明白的
    {
        e[cnt].v = v;
        e[cnt].w = w;
        e[cnt].next = pre[u];		//接替已有边
        pre[u] = cnt++;				//自己前插成为u派生的第一条边
    }
    
    void spfa (int u)
    {
        int v, w, i;
        for (i = 1; i <= n; i++)	//对于从1到n的编号
            dist[i] = inf, inq[i] = false;
        dist[u] = 0;
        queue<int> q;
        q.push (u);
        inq[u] = true;
        while (!q.empty())
        {
            u = q.front();
            q.pop();
            inq[u] = false;
            for (i = pre[u]; i != -1; i = e[i].next)
            {
                w = e[i].w;
                v = e[i].v;
                if (dist[u] + w < dist[v])
                {
                    dist[v] = dist[u] + w;
                    if (!inq[v])
                    {
                        q.push (v);
                        inq[v] = true;
                    }
                }
            }
        }
    }
    

    如果图中不存在负权回路,则当算法结束以后,对于边 &lt; x , y &gt; &lt;x,y&gt; <x,y> d i s [ y ] ≤ d i s [ x ] + w dis[y]\le dis[x]+w dis[y]dis[x]+w ,即 d i s [ y ] − d i s [ x ] ≤ w dis[y]-dis[x] \le w dis[y]dis[x]w 成立。

    二、什么是差分约束系统

    对于一组不等式:
    { x 1 − x 2 ≤ 0 x 1 − x 5 ≤ 1 x 2 − x 5 ≤ 1 x 3 − x 1 ≤ 5 x 4 − x 1 ≤ 4 x 4 − x 3 ≤ − 1 x 5 − x 3 ≤ − 3 x 5 − x 4 ≤ − 3 \left\{\begin{matrix} x_1-x_2 \le 0 \\ x_1-x_5 \le 1 \\ x_2-x_5 \le 1 \\ x_3 -x_1 \le 5 \\ x_4-x_1 \le 4 \\ x_4-x_3 \le -1 \\ x_5-x_3 \le -3 \\ x_5-x_4 \le -3 \end{matrix}\right. x1x20x1x51x2x51x3x15x4x14x4x31x5x33x5x43
    特点是全都是两个未知数的差小于等于某个常数(大于等于也可以,因为左右乘 − 1 -1 1 就可以化成小于等于的形式),这样的不等式组称作差分约束系统

    这个不等式组要么无解,要么就有无限组解。因为如果存在一组解 { x 1 , x 2 , . . , x n } \{x_1,x_2,..,x_n\} {x1,x2,..,xn} 的话,那么对于任何一个常数 k k k { x 1 + k , x 2 + k , . . , x n + k } \{x_1+k,x_2+k,..,x_n+k\} {x1+k,x2+k,..,xn+k} 也肯定是一组解,因为任何两个数加上一个数以后,它们之间的关系(差)是不变的,这个差分约束系统中的所有不等式都不会被破坏。

    三、差分约束系统与最短路径

    差分约束系统的解法用到了单源最短路径问题中的三角形不等式。即对有向图中任意一条边 &lt; u , v &gt; &lt;u,v&gt; <u,v> 都有: d i s [ v ] ≤ d i s [ u ] + l e n [ u ] [ v ] dis[v] \le dis[u]+len[u][v] dis[v]dis[u]+len[u][v] ,其中 d i s [ u ] dis[u] dis[u] d i s [ v ] dis[v] dis[v] 是从源点分别到点 u u u 和点 v v v 的最短路径的长度, l e n [ u ] [ v ] len[u][v] len[u][v] 是边 &lt; u , v &gt; &lt;u,v&gt; <u,v> 的长度值。

    这是显然的:如果存在顶点 u u u 到顶点 v v v 的有向边,那么从源点到顶点 v v v 的最短路径长度 小于等于从源点到顶点 u u u 的最短路径长度加上边 &lt; u , v &gt; &lt;u,v&gt; <u,v> 的长度值

    显然上述的不等式就是所描述的,也和差分约束系统中的不等式相同,因此就可以把差分约束系统转化成一张图。

    四、构图求解

    4.1 基本构图

    每个未知数 x i x_i xi 对应图中的一个顶点 v i v_i vi ,把所有的不等式都化成图中的一条边,对于不等式 x i − x j ≤ y x_i-x_j \le y xixjy 化成三角形不等式 x i ≤ x j + y x_i \le x_j+y xixj+y 就可以化成边 &lt; v j , v i &gt; &lt;v_j,v_i&gt; <vj,vi> 权值为 y y y 。最后在这张图上求一遍单源最短路,这些三角不等式就全部满足了,因为它是最短路问题的基本性质。

    1 不等式组 ( 1 ) (1) (1) 转化成 这里写图片描述

    4.2 求解

    1 1 1 为起点,则起点到各个顶点的最短距离为 d i s [ 1 ] = 0 , d i s [ 2 ] = 2 , d i s [ 3 ] = 5 , d i s [ 4 ] = 4 , d i s [ 5 ] = 1 dis[1]=0,dis[2]=2,dis[3]=5,dis[4]=4,dis[5]=1 dis[1]=0,dis[2]=2,dis[3]=5,dis[4]=4,dis[5]=1 则得到解 x 1 = 0 , x 2 = 1 , x 3 = 5 , x 4 = 4 , x 5 = 1 x_1=0,x_2=1,x_3=5,x_4=4,x_5=1 x1=0,x2=1,x3=5,x4=4,x5=1

    3 3 3 为起点,则起点到各个顶点的最短距离为 d i s [ 1 ] = − 5 , d i s [ 2 ] = − 5 , d i s [ 3 ] = 0 , d i s [ 4 ] = − 1 , d i s [ 5 ] = − 4 dis[1]=-5,dis[2]=-5,dis[3]=0,dis[4]=-1,dis[5]=-4 dis[1]=5,dis[2]=5,dis[3]=0,dis[4]=1,dis[5]=4 则得到解 x 1 = − 5 , x 2 = − 4 , x 3 = 0 , x 4 = − 1 , x 5 = − 4 x_1=-5,x_2=-4,x_3=0,x_4=-1,x_5=-4 x1=5,x2=4,x3=0,x4=1,x5=4

    以不同顶点作为起点会得到不同的解,但这些解都一定合理。

    • 什么情况下无解? 存在负权回路!
    4.3 增加源点

    具体实现时,往往在原图上附加一个顶点,这个顶点与每个顶点都连接一条权值为 0 0 0 的边,以上述不等式为例,也就是新加入一个未知数 x 0 x_0 x0 ,然后对每个未知数都对 x 0 x_0 x0 加一个不等式,得到这里写图片描述这样的不等式组 ( 2 ) (2) (2) ,化成顶点图这里写图片描述

    图中每一条边都代表差分约束系统的一个不等式。现在以 v 0 v_0 v0 为源点,求单源最短路,最终得到的 v 0 v_0 v0 v i v_i vi 的最短路径长度就是 x i x_i xi 的一个解。如图中 v 0 v_0 v0 到其他各个顶点的最短距离分别是 { − 5 , − 3 , 0 , − 1 , − 4 } \{-5,-3,0,-1,-4\} {5,3,0,1,4} ,因此满足上述不等式的一组解就是 { x 1 , x 2 , x 3 , x 4 , x 5 } = { − 5 , − 3 , 0 , − 1 , − 4 } \{x_1,x_2,x_3,x_4,x_5\}=\{-5,-3,0,-1,-4\} {x1,x2,x3,x4,x5}={5,3,0,1,4} 。当然把每个数都加上 10 10 10 也是一组解 { 5 , 7 , 10 , 9 , 6 } \{5,7,10,9,6\} {5,7,10,9,6} ,但是这组解只满足不等式组 ( 1 ) (1) (1) ,也就是原先的差分约束系统,而不满足不等式组 ( 2 ) (2) (2) ,也是我们后来加上的那些不等式。当然这是无关紧要的,因为 x 0 x_0 x0 本来就是个局外人,并不在乎它。

    对于上面例子而言,它代表的解 x 0 x_0 x0 值也在其中也就是 x 0 = 0 x_0=0 x0=0 。但是 x 0 x_0 x0 的值是无可争议的,既然是以它作为源点求最短路径,那么源点到它的最短路径当然是 0 0 0 了,因此,我们解这个差分约束系统无形中存在一个条件 x 0 = 0 x_0=0 x0=0 ,那么它有什么用呢?可以限制所有的未知数的解都不大于0

    • 一个有趣的结论:当我们一开始就把 x 0 x_0 x0 的解死定为 A A A 的时候,所有未知数的解都不会大于 A A A (一开始把 d i s [ 0 ] = A dis[0]=A dis[0]=A

    五、例题

    5.1 最大身高

    Description

    ​ FJ的 N ( 1 ≤ N ≤ 10 , 000 ) N(1\le N \le 10,000) N(1N10,000) 头奶牛站成一排,并从左到右被编号为 1.. N 1..N 1..N 。每头奶牛都有一个正整数的身高,具体的值FJ暂时保密,但会告诉你它们当中最高的一头的编号 I I I 和身高 H   ( 1 ≤ H ≤ 1 0 6 ) H\ (1 \le H \le 10^6) H (1H106) 的值。

    ​ FJ制作一张包含 R   ( 0 ≤ R ≤ 1 0 4 ) R\ (0 \le R \le 10^4) R (0R104) 行的列表,每行的都是形如"第17号奶牛能看到第34号奶牛”,其意义是34号奶牛的身高不低于17号奶牛的身高,并且在17号和34号之间的奶牛的身高都严格低于17号奶牛的身高。

    ​ 请你确定奶牛每头奶牛的最大可能的身高,我们保证给出的数据都是正确的,并且一定有满足限制条件的解。

    Input

    ​ 第1行:包含四个用空格分开的整数:N, I, H 和 R

    ​ 第2…R+1行:每行包含两个用空格分开的整数A和B(1 <= A,B <= N),表示奶牛A能看到奶牛B

    Output

    ​ 第1…N行:第i行包含一个整数,表示第i头奶牛的最大身高。

    Sample Input

    9 3 5 5
    1 3
    5 3
    4 3
    3 7
    9 8
    

    Sample Output

    5
    4
    5
    3
    4
    4
    5
    5
    5
    

    Solution
    { x 1 − x 3 ≤ 0 x 2 − x 1 ≤ − 1 x 5 − x 3 ≤ 0 x 4 − x 5 ≤ − 1 x 4 − x 3 ≤ 0 x 3 − x 7 ≤ 0 x 4 − x 3 ≤ − 1 x 5 − x 3 ≤ − 1 x 6 − x 3 ≤ − 1 x 9 − x 8 ≤ 0 \left\{\begin{matrix} x_1-x_3 \le 0\\ x_2-x_1\le -1\\ x_5-x_3\le 0\\ x_4-x_5\le -1\\ x_4-x_3\le 0\\ x_3-x_7\le 0\\ x_4-x_3\le -1\\ x_5-x_3\le -1\\ x_6-x_3\le -1\\ x_9-x_8\le 0 \end{matrix}\right. x1x30x2x11x5x30x4x51x4x30x3x70x4x31x5x31x6x31x9x80

    5.2 糖果

    Description

    ​ 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果。但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候,lxhgww需要满足小朋友们的K个要求。幼儿园的糖果总是有限的,lxhgww想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到糖果,并且满足小朋友们所有的要求。

    Input

    ​ 输入的第一行是两个整数N,K。

    ​ 接下来K行,表示这些点需要满足的关系,每行3个数字,X,A,B。

    如果X=1,表示第A个小朋友分到的糖果必须和第B个小朋友分到的糖果一样多;

    如果X=2,表示第A个小朋友分到的糖果必须少于第B个小朋友分到的糖果;

    如果X=3,表示第A个小朋友分到的糖果必须不少于第B个小朋友分到的糖果;

    如果X=4,表示第A个小朋友分到的糖果必须多于第B个小朋友分到的糖果;

    如果X=5,表示第A个小朋友分到的糖果必须不多于第B个小朋友分到的糖果;

    Output

    ​ 输出一行,表示lxhgww老师至少需要准备的糖果数,如果不能满足小朋友们的所有要求,就输出-1

    Sample Input

    7 7
    1 4 5
    2 1 4
    5 3 5
    4 1 3
    3 1 2
    2 2 3
    4 6 7
    

    Sample Output

    17
    

    Solution

    本题对于每个小朋友要求都能分到糖果,也就是说,每个小朋友的糖果数应该要大于 1 1 1 ,怎么把不等式组的解都变为 ≥ 1 ≥1 1

    • 重要结论:以 x i − x j ≤ y x_i-x_j\le y xixjy 为约束条件,建图求最短路后得到的是最大解。所有的解都不大于且尽可能逼近 d i s [ x 0 ] dis[x_0] dis[x0]

    若有 x i − x j ≤ y x_i-x_j \le y xixjy 可在图中连一条 x j x_j xj 出发指向 x i x_i xi 的有向边,权值为 y y y ,再添加一个源点 x 0 x_0 x0 指向各个顶点 x 1 , x 2 , . . , x n x_1,x_2,..,x_n x1,x2,..,xn 权值为 0 0 0 。若一开始就把 d i s [ x 0 ] dis[x_0] dis[x0] 的值定死为 A A A 再求最短路,那么求出来的解都是不大于 A A A 且与 A A A 接近的最大解,也就是 x i ≤ A x_i \le A xiA ,那么我们设 d i s [ x 0 ] = − 1 dis[x_0]=-1 dis[x0]=1 ,所有未知数解直接取绝对值,行吗?答案是它取绝对值以后不难满足不等式组 ( 1 ) (1) (1) ,通过一些讨论发现,直接在所有未知数上加上某个常数来解决此题是不可行的。

    正确接啊应该是,对于这题,按照相反的建图方式,这里写图片描述

    若有 x i − x j ≥ y x_i-x_j ≥y xixjy 则在图中连上一条 &lt; x j , x i &gt; &lt;x_j,x_i&gt; <xj,xi> 的有向边,权值为 y y y ,再以 x 0 x_0 x0 为起点,求单源最长路(无正权环前提下),求出的起点到各个点的距离就是不等式组 ( 2 ) (2) (2) 的一组解。若一开始把 d i s [ x 0 ] dis[x_0] dis[x0] 定值为 A A A 再求最长路,那么求出的其他点的 d i s [ x i ] dis[x_i] dis[xi] 的值一定不会小于 A A A ,并且,求出的值是不小于它且最接近它的一组,也就是最小解

    六、总结

    查分约束求解不等式组分为两种方法:最短路最长路

    其中最短路对应最大解,最长路对应最小解,特别的,若有 x i = x j x_i=x_j xi=xj 的情况,建图时候,从 x i x_i xi 出发连一条权值为 0 0 0 的边到 x j x_j xj ,同时也建一条同等权值的反向边。

    对于许多复杂的问题,我们通常选择将不够清晰、难以处理的模型转化为容易理解、易于处理的模型。就像用已知的知识作为工具去探索未知领域一样,联想、发散、转化将成为相当有用的武器。

    展开全文
  • 差分约束系统

    千次阅读 多人点赞 2013-03-17 23:23:59
    差分约束系统 X1 - X2 X1 - X5 X2 - X5 X3 - X1 X4 - X1 X4 - X3 X5 - X3 X5 - X4 不等式组(1)   全都是两个未知数的差小于等于某个常数(大于等于也可以,因为左右乘以-1就可以化成小于等于)...

    差分约束系统

    X1 - X2 <= 0
    X1 - X5 <= -1
    X2 - X5 <= 1
    X3 - X1 <= 5
    X4 - X1 <= 4
    X4 - X3 <= -1
    X5 - X3 <= -3
    X5 - X4 <= -3
    不等式组(1) 
        全都是两个未知数的差小于等于某个常数(大于等于也可以,因为左右乘以-1就可以化成小于等于)。这样的不等式组就称作差分约束系统。
        这个不等式组要么无解,要么就有无数组解。因为如果有一组解{X1, X2, ..., Xn}的话,那么对于任何一个常数k,{X1 + k, X2 + k, ..., Xn + k}肯定也是一组解,因为任何两个数同时加一个数之后,它们的差是不变的,那么这个差分约束系统中的所有不等式都不会被破坏。  
        差分约束系统的解法利用到了单源最短路径问题中的三角形不等式。即对于任何一条边u -> v,都有:
    d(v) <= d(u) + w(u, v) 
        其中d(u)和d(v)是从源点分别到点u和点v的最短路径的权值,w(u, v)是边u -> v的权值。
        显然以上不等式就是d(v) - d(u) <= w(u, v)。这个形式正好和差分约束系统中的不等式形式相同。于是我们就可以把一个差分约束系统转化成一张图,每个未知数Xi对应图中的一个顶点Vi,把所有不等式都化成图中的一条边。对于不等式Xi - Xj <= c,把它化成三角形不等式:Xi <= Xj + c,就可以化成边Vj -> Vi,权值为c。最后,我们在这张图上求一次单源最短路径,这些三角形不等式就会全部都满足了,因为它是最短路径问题的基本性质嘛。
        话说回来,所谓单源最短路径,当然要有一个源点,然后再求这个源点到其他所有点的最短路径。那么源点在哪呢?我们不妨自已造一个。以上面的不等式组为例,我们就再新加一个未知数X0。然后对原来的每个未知数都对X0随便加一个不等式(这个不等式当然也要和其它不等式形式相同,即两个未知数的差小于等于某个常数)。我们索性就全都写成Xn - X0 <= 0,于是这个差分约束系统中就多出了下列不等式: 
    X1 - X0 <= 0
    X2 - X0 <= 0
    X3 - X0 <= 0
    X4 - X0 <= 0
    X5 - X0 <= 0
    不等式组(2) 
        对于这5个不等式,也在图中建出相应的边。最后形成的图如下:
    图1 

        图中的每一条边都代表差分约束系统中的一个不等式。现在以V0为源点,求单源最短路径。最终得到的V0到Vn的最短路径长度就是Xn的一个解啦。从图1中可以看到,这组解是{-5, -3, 0, -1, -4}。当然把每个数都加上10也是一组解:{5, 7, 10, 9, 6}。但是这组解只满足不等式组(1),也就是原先的差分约束系统;而不满足不等式组(2),也就是我们后来加上去的那些不等式。当然这是无关紧要的,因为X0本来就是个局外人,是我们后来加上去的,满不满足与X0有关的不等式我们并不在乎。
        也有可能出现无解的情况,也就是从源点到某一个顶点不存在最短路径。也说是图中存在负权的圈。这一点我就不展开了,请自已参看最短路径问题的一些基本定理。
        其实,对于图1来说,它代表的一组解其实是{0, -5, -3, 0, -1, -4},也就是说X0的值也在这组解当中。但是X0的值是无可争议的,既然是以它作为源点求的最短路径,那么源点到它的最短路径长度当然是0了。因此,实际上我们解的这个差分约束系统无形中又存在一个条件:
    X0 = 0 
        也就是说在不等式组(1)、(2)组成的差分约束系统的前提下,再把其中的一个未知数的值定死。这样的情况在实际问题中是很常见的。比如一个问题表面上给出了一些不等式,但还隐藏着一些不等式,比如所有未知数都大于等于0或者都不能超过某个上限之类的。比如上面的不等式组(2)就规定了所有未知数都小于等于0。   
        对于这种有一个未知数定死的差分约束系统,还有一个有趣的性质,那就是通过最短路径算法求出来的一组解当中,所有未知数都达到最大值。下面我来粗略地证明一下,这个证明过程要结合Bellman-Ford算法的过程来说明。
        假设X0是定死的;X1到Xn在满足所有约束的情况下可以取到的最大值分别为M1、M2、……、Mn(当然我们不知道它们的值是多少);解出的源点到每个点的最短路径长度为D1、D2、……、Dn。
        基本的Bellman-Ford算法是一开始初始化D1到Dn都是无穷大。然后检查所有的边对应的三角形不等式,一但发现有不满足三角形不等式的情况,则更新对应的D值。最后求出来的D1到Dn就是源点到每个点的最短路径长度。
        如果我们一开始初始化D1、D2、……、Dn的值分别为M1、M2、……、Mn,则由于它们全都满足三角形不等式(我们刚才已经假设M1到Mn是一组合法的解),则Bellman-Ford算法不会再更新任合D值,则最后得出的解就是M1、M2、……、Mn。
        好了,现在知道了,初始值无穷大时,算出来的是D1、D2、……、Dn;初始值比较小的时候算出来的则是M1、M2、……、Mn。大家用的是同样的算法,同样的计算过程,总不可能初始值大的算出来的结果反而小吧。所以D1、D2、……、Dn就是M1、M2、……、Mn。
        那么如果在一个未知数定死的情况下,要求其它所有未知数的最小值怎么办?只要反过来求最长路径就可以了。最长路径中的三角不等式与最短路径中相反:
    d(v) >= d(u) + w(u, v)
    也就是d(v) - d(u) >= w(u, v) 
        所以建图的时候要先把所有不等式化成大于等于号的。其它各种过程,包括证明为什么解出的是最小值的证法,都完全类似。

    最近几天系统得学习了一些差分约束系统的原理,特此记录如下:
    所谓差分约束系统,是指一组不定方程(A,x,T,b),其中A的每行有一个1,一个-1,其余为0,x为解向量,T为<=或>=组成的向量,b为约束矢量。具体来说,就是每行都具有 xi-xj >=|<= bi 的形式。约束的目标是使得目标函数xt-xs最大或最小。
    这是典型的线性规划的个案,但是也可以转化为图论来做,利用最短路(或最长路)方法可以实现高效的解决方案。


    下面通过poj上的部分例题来详细解释如下:
    poj3159 Candies
    这是我接触差分约束的第一题。设S[a]为kid a获得的candies数,则每一行代表的约束是S[b]-S[a]<=c,目标函数是使得S=S[N]-S[1]最大。
    利用差分约束的思想建图,对于每一条约束,从a向b做一条长为c的边,则从1到N的最短路即为所求。由于本题c皆为非负数,所以可以用Dijkstra高效解决。
    核心代码(构图):
    void input()
    {
    int i,xx,yy,ll;
    scanf("%d %d",&n,&m);
    memset(nodes,-1,(n+1)*sizeof(int));
    for (i=0;i<m;++i)
    {
       scanf("%d %d %d",&xx,&yy,&ll);
       --xx;
       --yy;
       sts[i].py=yy;
       sts[i].pl=ll;
       sts[i].next=nodes[xx];
       nodes[xx]=i;
    }
    }

    poj1364 King
    注意到本题的约束是>和<,然而我们需要的是>=或者<=,所以必须有所转化。幸好是整数规划,所以我们可以转化如下:
    x<a -》 x<=a-1
    x>b -》 x>=b+1
    然而需要注意的是,差分约束必须保证所有的不等式具有同样的不等号才能正确运行!所以我们把所有符号转为<=,然后构图,做Bellman_ford。
    核心代码(构图):
    bool input()
    {
    scanf("%d",&n);
    if (n==0)
       return 0;
    scanf("%d",&m);
    int si,ni,ki,i;
    for (i=0;i<m;++i)
    {
       scanf("%d %d %s %d",&si,&ni,oi,&ki);
       if (oi[0]=='g')
       {
        px[i]=si-1;
        py[i]=si+ni;
        pl[i]=-ki-1;
       }
       else
       {
        px[i]=si+ni;
        py[i]=si-1;
        pl[i]=ki-1;
       }
    }
    return 1;
    }

    poj1716 Integer Intervals
    poj1201 Intervals
    后者是前者的进化版,所以我们以后者为例。
    令S[i]为从0到i-1中数的个数,则以下为约束条件:
    s[bi]-S[ai]>=ci
    1>=S[i+1]-S[i]>=0
    注意本题要求的是最小值,而按照>=号建图后发现图中有负环,怎么办呢?
    其实很简单,本题求的不是最短路,而是最长路!而Bellman_ford依然可以承担此项重任!
    核心代码(构图):
    void input()
    {
    int xx,yy,cc,i;
    scanf("%d",&n);
    st=10000;
    ed=0;
    m=0;
    for (i=0;i<n;++i)
    {
       scanf("%d %d %d",&xx,&yy,&cc);
       px[m]=xx;
       py[m]=yy+1;
       pl[m]=cc;
       if (st>xx)
        st=xx;
       if (ed<yy+1)
        ed=yy+1;
       ++m;
    }
    for (i=st;i<ed;++i)
    {
       px[m]=i;
       py[m]=i+1;
       pl[m]=0;
       ++m;
    }
    for (i=ed;i>st;--i)
    {
       px[m]=i;
       py[m]=i-1;
       pl[m]=-1;
       ++m;
    }
    for (i=st;i<=ed;++i)
       dps[i]=MAXS;
    dps[ed]=0;
    }

    poj3169 Layout
    本题是求约束下的最大值,只要依<=建图并求最短路即可!
    核心代码(构图):
    void input()
    {
    scanf("%d %d %d",&n,&ml,&md);
    m=0;
    int i,xx,yy,ll;
    for (i=0;i<ml;++i)
    {
       scanf("%d %d %d",&xx,&yy,&ll);
       --xx;
       --yy;
       px[m]=xx;
       py[m]=yy;
       pl[m]=ll;
       ++m;
    }
    for (i=0;i<md;++i)
    {
       scanf("%d %d %d",&xx,&yy,&ll);
       --xx;
       --yy;
       px[m]=yy;
       py[m]=xx;
       pl[m]=-ll;
       ++m;
    }
    for (i=1;i<n;++i)
    {
       px[m]=i;
       py[m]=i-1;
       pl[m]=0;
       ++m;
    }
    }

    poj1275 Cashier Employment
    这是我很久以前就从黑书上见到的题目,但是因为当时自己才疏学浅,怎么都写不出来。现在搞懂了差分约束,发现其实不是那么难的!
    利用差分约束寻找可行解,在所有可行解中二分最优。
    核心代码(构图):
    void createmap(int sum)
    {
    int i,j;
    m=0;
    for (i=1;i<25;++i)
    {
       px[m]=i-1;
       py[m]=i;
       pl[m]=0;
       ++m;
    }
    for (i=1;i<25;++i)
    {
       px[m]=i;
       py[m]=i-1;
       pl[m]=-t[i];
       ++m;
    }
    px[m]=0;
    py[m]=24;
    pl[m]=sum;
    ++m;
    for (j=1;j<25;++j)
    {
       i=(j-1+8)$+1;
       px[m]=j;
       py[m]=i;
       if (i>j)
        pl[m]=r[i];
       else
        pl[m]=r[i]-sum;
       ++m;
    }
    }

    总论:
    感谢各位大牛小牛们能耐心看到这里,在此我准备用一些简单的语句来总结差分约束系统的应用特性:
    >=,求最小值,做最长路;
    <=,求最大值,做最短路。
    边都是从后往前~~~
    <=构图。
    有负环说明无解。
    求不出最短路(为Inf)为任意解。
    >=构图时类似。

    以上为我的一点短见,希望各位大牛不吝批评指正!!!

    展开全文
  • 差分约束系统详解

    千次阅读 2016-09-07 21:52:50
    差分约束系统 X1 - X2 X1 - X5 X2 - X5 X3 - X1 X4 - X1 X4 - X3 X5 - X3 X5 - X4 不等式组(1)   全都是两个未知数的差小于等于某个常数(大于等于也可以,因为左右乘以-1就可以化成小于等于)...

    差分约束系统

    X1 - X2 <= 0
    X1 - X5 <= -1
    X2 - X5 <= 1
    X3 - X1 <= 5
    X4 - X1 <= 4
    X4 - X3 <= -1
    X5 - X3 <= -3
    X5 - X4 <= -3
    不等式组(1) 
        全都是两个未知数的差小于等于某个常数(大于等于也可以,因为左右乘以-1就可以化成小于等于)。这样的不等式组就称作差分约束系统。
        这个不等式组要么无解,要么就有无数组解。因为如果有一组解{X1, X2, ..., Xn}的话,那么对于任何一个常数k,{X1 + k, X2 + k, ..., Xn + k}肯定也是一组解,因为任何两个数同时加一个数之后,它们的差是不变的,那么这个差分约束系统中的所有不等式都不会被破坏。  
        差分约束系统的解法利用到了单源最短路径问题中的三角形不等式。即对于任何一条边u -> v,都有:
    d(v) <= d(u) + w(u, v) 
        其中d(u)和d(v)是从源点分别到点u和点v的最短路径的权值,w(u, v)是边u -> v的权值。
        显然以上不等式就是d(v) - d(u) <= w(u, v)。这个形式正好和差分约束系统中的不等式形式相同。于是我们就可以把一个差分约束系统转化成一张图,每个未知数Xi对应图中的一个顶点Vi,把所有不等式都化成图中的一条边。对于不等式Xi - Xj <= c,把它化成三角形不等式:Xi <= Xj + c,就可以化成边Vj -> Vi,权值为c。最后,我们在这张图上求一次单源最短路径,这些三角形不等式就会全部都满足了,因为它是最短路径问题的基本性质嘛。
        话说回来,所谓单源最短路径,当然要有一个源点,然后再求这个源点到其他所有点的最短路径。那么源点在哪呢?我们不妨自已造一个。以上面的不等式组为例,我们就再新加一个未知数X0。然后对原来的每个未知数都对X0随便加一个不等式(这个不等式当然也要和其它不等式形式相同,即两个未知数的差小于等于某个常数)。我们索性就全都写成Xn - X0 <= 0,于是这个差分约束系统中就多出了下列不等式: 
    X1 - X0 <= 0
    X2 - X0 <= 0
    X3 - X0 <= 0
    X4 - X0 <= 0
    X5 - X0 <= 0
    不等式组(2) 
        对于这5个不等式,也在图中建出相应的边。最后形成的图如下:
    图1 

        图中的每一条边都代表差分约束系统中的一个不等式。现在以V0为源点,求单源最短路径。最终得到的V0到Vn的最短路径长度就是Xn的一个解啦。从图1中可以看到,这组解是{-5, -3, 0, -1, -4}。当然把每个数都加上10也是一组解:{5, 7, 10, 9, 6}。但是这组解只满足不等式组(1),也就是原先的差分约束系统;而不满足不等式组(2),也就是我们后来加上去的那些不等式。当然这是无关紧要的,因为X0本来就是个局外人,是我们后来加上去的,满不满足与X0有关的不等式我们并不在乎。
        也有可能出现无解的情况,也就是从源点到某一个顶点不存在最短路径。也说是图中存在负权的圈。这一点我就不展开了,请自已参看最短路径问题的一些基本定理。
        其实,对于图1来说,它代表的一组解其实是{0, -5, -3, 0, -1, -4},也就是说X0的值也在这组解当中。但是X0的值是无可争议的,既然是以它作为源点求的最短路径,那么源点到它的最短路径长度当然是0了。因此,实际上我们解的这个差分约束系统无形中又存在一个条件:
    X0 = 0 
        也就是说在不等式组(1)、(2)组成的差分约束系统的前提下,再把其中的一个未知数的值定死。这样的情况在实际问题中是很常见的。比如一个问题表面上给出了一些不等式,但还隐藏着一些不等式,比如所有未知数都大于等于0或者都不能超过某个上限之类的。比如上面的不等式组(2)就规定了所有未知数都小于等于0。   
        对于这种有一个未知数定死的差分约束系统,还有一个有趣的性质,那就是通过最短路径算法求出来的一组解当中,所有未知数都达到最大值。下面我来粗略地证明一下,这个证明过程要结合Bellman-Ford算法的过程来说明。
        假设X0是定死的;X1到Xn在满足所有约束的情况下可以取到的最大值分别为M1、M2、……、Mn(当然我们不知道它们的值是多少);解出的源点到每个点的最短路径长度为D1、D2、……、Dn。
        基本的Bellman-Ford算法是一开始初始化D1到Dn都是无穷大。然后检查所有的边对应的三角形不等式,一但发现有不满足三角形不等式的情况,则更新对应的D值。最后求出来的D1到Dn就是源点到每个点的最短路径长度。
        如果我们一开始初始化D1、D2、……、Dn的值分别为M1、M2、……、Mn,则由于它们全都满足三角形不等式(我们刚才已经假设M1到Mn是一组合法的解),则Bellman-Ford算法不会再更新任合D值,则最后得出的解就是M1、M2、……、Mn。
        好了,现在知道了,初始值无穷大时,算出来的是D1、D2、……、Dn;初始值比较小的时候算出来的则是M1、M2、……、Mn。大家用的是同样的算法,同样的计算过程,总不可能初始值大的算出来的结果反而小吧。所以D1、D2、……、Dn就是M1、M2、……、Mn。
        那么如果在一个未知数定死的情况下,要求其它所有未知数的最小值怎么办?只要反过来求最长路径就可以了。最长路径中的三角不等式与最短路径中相反:
    d(v) >= d(u) + w(u, v)
    也就是d(v) - d(u) >= w(u, v) 
        所以建图的时候要先把所有不等式化成大于等于号的。其它各种过程,包括证明为什么解出的是最小值的证法,都完全类似。

    最近几天系统得学习了一些差分约束系统的原理,特此记录如下:
    所谓差分约束系统,是指一组不定方程(A,x,T,b),其中A的每行有一个1,一个-1,其余为0,x为解向量,T为<=或>=组成的向量,b为约束矢量。具体来说,就是每行都具有 xi-xj >=|<= bi 的形式。约束的目标是使得目标函数xt-xs最大或最小。
    这是典型的线性规划的个案,但是也可以转化为图论来做,利用最短路(或最长路)方法可以实现高效的解决方案。


    下面通过poj上的部分例题来详细解释如下:
    poj3159 Candies
    这是我接触差分约束的第一题。设S[a]为kid a获得的candies数,则每一行代表的约束是S[b]-S[a]<=c,目标函数是使得S=S[N]-S[1]最大。
    利用差分约束的思想建图,对于每一条约束,从a向b做一条长为c的边,则从1到N的最短路即为所求。由于本题c皆为非负数,所以可以用Dijkstra高效解决。
    核心代码(构图):
    void input()
    {
    int i,xx,yy,ll;
    scanf("%d %d",&n,&m);
    memset(nodes,-1,(n+1)*sizeof(int));
    for (i=0;i<m;++i)
    {
       scanf("%d %d %d",&xx,&yy,&ll);
       --xx;
       --yy;
       sts[i].py=yy;
       sts[i].pl=ll;
       sts[i].next=nodes[xx];
       nodes[xx]=i;
    }
    }

    poj1364 King
    注意到本题的约束是>和<,然而我们需要的是>=或者<=,所以必须有所转化。幸好是整数规划,所以我们可以转化如下:
    x<a -》 x<=a-1
    x>b -》 x>=b+1
    然而需要注意的是,差分约束必须保证所有的不等式具有同样的不等号才能正确运行!所以我们把所有符号转为<=,然后构图,做Bellman_ford。
    核心代码(构图):
    bool input()
    {
    scanf("%d",&n);
    if (n==0)
       return 0;
    scanf("%d",&m);
    int si,ni,ki,i;
    for (i=0;i<m;++i)
    {
       scanf("%d %d %s %d",&si,&ni,oi,&ki);
       if (oi[0]=='g')
       {
        px[i]=si-1;
        py[i]=si+ni;
        pl[i]=-ki-1;
       }
       else
       {
        px[i]=si+ni;
        py[i]=si-1;
        pl[i]=ki-1;
       }
    }
    return 1;
    }

    poj1716 Integer Intervals
    poj1201 Intervals
    后者是前者的进化版,所以我们以后者为例。
    令S[i]为从0到i-1中数的个数,则以下为约束条件:
    s[bi]-S[ai]>=ci
    1>=S[i+1]-S[i]>=0
    注意本题要求的是最小值,而按照>=号建图后发现图中有负环,怎么办呢?
    其实很简单,本题求的不是最短路,而是最长路!而Bellman_ford依然可以承担此项重任!
    核心代码(构图):
    void input()
    {
    int xx,yy,cc,i;
    scanf("%d",&n);
    st=10000;
    ed=0;
    m=0;
    for (i=0;i<n;++i)
    {
       scanf("%d %d %d",&xx,&yy,&cc);
       px[m]=xx;
       py[m]=yy+1;
       pl[m]=cc;
       if (st>xx)
        st=xx;
       if (ed<yy+1)
        ed=yy+1;
       ++m;
    }
    for (i=st;i<ed;++i)
    {
       px[m]=i;
       py[m]=i+1;
       pl[m]=0;
       ++m;
    }
    for (i=ed;i>st;--i)
    {
       px[m]=i;
       py[m]=i-1;
       pl[m]=-1;
       ++m;
    }
    for (i=st;i<=ed;++i)
       dps[i]=MAXS;
    dps[ed]=0;
    }

    poj3169 Layout
    本题是求约束下的最大值,只要依<=建图并求最短路即可!
    核心代码(构图):
    void input()
    {
    scanf("%d %d %d",&n,&ml,&md);
    m=0;
    int i,xx,yy,ll;
    for (i=0;i<ml;++i)
    {
       scanf("%d %d %d",&xx,&yy,&ll);
       --xx;
       --yy;
       px[m]=xx;
       py[m]=yy;
       pl[m]=ll;
       ++m;
    }
    for (i=0;i<md;++i)
    {
       scanf("%d %d %d",&xx,&yy,&ll);
       --xx;
       --yy;
       px[m]=yy;
       py[m]=xx;
       pl[m]=-ll;
       ++m;
    }
    for (i=1;i<n;++i)
    {
       px[m]=i;
       py[m]=i-1;
       pl[m]=0;
       ++m;
    }
    }

    poj1275 Cashier Employment
    这是我很久以前就从黑书上见到的题目,但是因为当时自己才疏学浅,怎么都写不出来。现在搞懂了差分约束,发现其实不是那么难的!
    利用差分约束寻找可行解,在所有可行解中二分最优。
    核心代码(构图):
    void createmap(int sum)
    {
    int i,j;
    m=0;
    for (i=1;i<25;++i)
    {
       px[m]=i-1;
       py[m]=i;
       pl[m]=0;
       ++m;
    }
    for (i=1;i<25;++i)
    {
       px[m]=i;
       py[m]=i-1;
       pl[m]=-t[i];
       ++m;
    }
    px[m]=0;
    py[m]=24;
    pl[m]=sum;
    ++m;
    for (j=1;j<25;++j)
    {
       i=(j-1+8)$+1;
       px[m]=j;
       py[m]=i;
       if (i>j)
        pl[m]=r[i];
       else
        pl[m]=r[i]-sum;
       ++m;
    }
    }

    总论:
    感谢各位大牛小牛们能耐心看到这里,在此我准备用一些简单的语句来总结差分约束系统的应用特性:
    >=,求最小值,做最长路;
    <=,求最大值,做最短路。
    边都是从后往前~~~
    <=构图。
    有负环说明无解。
    求不出最短路(为Inf)为任意解。
    >=构图时类似。

    以上为我的一点短见,希望各位大牛不吝批评指正!!!

    注:此篇文章作者不可考

    展开全文
  • 在指定极点区域状态方差约束前提下,研究了线性不确定系统的可靠控制问题。采用比离散故障模型更实际一般的连续增益故障模型,利用LMIs方法在不附带保守性的情况下,给出了可靠控制存在的条件。在执行器故障的...
  • 先给出在不确定性参数范数有界的前提下T-S模糊系统满足给定H∞性能指标的充分条件,再寻找在一个有界能量干扰作用下包含所有系统状态轨迹的椭圆域,然后利用双椭圆域方法S-Procesure将时域硬约束转化为一组LMI约束....
  • oracle 唯一约束 唯一索引

    千次阅读 2016-07-18 11:43:21
    唯一约束 唯一索引

    唯一性约束

    唯一性约束指表中一个字段或者多个字段联合起来能够唯一标识一条记录的约束。联合字段中,可以包含空值。
    注:在Oracle中,唯一性约束最多可以有32列。
    唯一性约束可以在创建表时或使用ALTER TABLE语句创建。

    唯一性约束和主键的区别
    主键(Primary Key):所有组成主键的列都不能包含空值。唯一性约束(Unique Constraint):如果唯一性约束由多列组成,其中的部分列可以包含空值。Oracle中不容许在相同列上既创建主键又创建唯一性约束。

    1、创建联合约束(下面该条sql的作用是STAFF_ID, FIRST_NAME, LAST_NAME不能同时相等)

    eg:alter table T_GJCX_EMP

      add constraint T_GJCX_EMP_JOINT_KEY unique (STAFF_ID, FIRST_NAME, LAST_NAME)
    (1)基于单列的唯一性约束
    alter table tb_supplier
    add constraint  tb_supplier_u1
    unique (supplier_id);

    (2)基于多列的唯一性约束
    alter table tb_products
    add constraint  tb_products_u1
    unique (product_id,product_name);

    2 、禁用唯一性约束
    (1)语法:
    ALTER TABLE table_name
    DISABLE CONSTRAINT constraint_name;
    (2)示例:
    ALTER TABLE tb_supplier
    DISABLE CONSTRAINT  tb_supplier_u1;

    问题:

    创建表的唯一性索引【CREATE UNIQUE INDEX idx_ut ON t(NVL2(NULLIF(b,3),a,NULL),NVL2(NULLIF(b,3),b,NULL),NVL2(NULLIF(b,3),c,NULL))】

    和创建表的唯一性约束的异同:
    唯一约束可以用于保证在基表中增加一条记录时,一个或多个列值是唯一的。如果已经给一个或以上列定义了唯一约束,那么任何操作都不可能替换这些列中的复制的值。尽管唯一的、系统要求的索引是用来加强唯一约束,但是定义唯一约束和创建唯一索引之间还是有区别的。即使这二者之间都可以增强唯一性,唯一索引允许NULL值并且一般不能用在指示性约束中。换句话说,唯一约束不允许NULL值并能在外键规范中使用( "NULL"的意思就是列值不明确并且和其他值不同,还包括其他NULL值)。

    总结:唯一索引就是唯一索引,唯一约束是通过唯一索引来实现的,创建唯一约束时会创建一个唯一索引 前提条件是约束列上没有唯一索引。

    展开全文
  • 差分约束系统(最短路径问题)

    千次阅读 2017-04-26 17:08:38
    差分约束系统 X1 - X2 X1 - X5 X2 - X5 X3 - X1 X4 - X1 X4 - X3 X5 - X3 X5 - X4 不等式组(1)   全都是两个未知数的差小于等于某个常数(大于等于也可以,因为左右乘以-1就可以化成小于等于)。这样的...
  • Tits等最近在〔2]中提出了一种双重内点算法,在保证收敛性质不受影响的前提下,该算法大大减弱了以上线性无关条件。 通过一段时间的发展,存在于早期QP一free算法中的一些缺点己经正在被解决。例如,起初的一些QP...
  • 比较触发器和约束

    千次阅读 多人点赞 2012-08-08 10:50:52
    在SQL Server数据库中提供了两种主要机制来强制使用业务规则数据完整性,它们是SQL Server约束和触发器。触发器其实就是一个特殊类型的存储过程,可以在执行某个操作时自动触发。触发器与约束都可以实现数据的一致...
  • 原因:PyContracts的目的不是将Python转换为静态类型的语言(尽管您可以按照自己的意愿严格执行),而是避免对各种前提条件进行耗时且令人费解的检查。 实际上,除类型约束之外,我发现强加值大小约束的功能也很...
  • 我们通常会在Hibernate中设置好父表与子表的对应关系,并可实现在没有on delete cascade前提下,...那我们在直接删除汇总时,会遇到“ORA-02292: 违反完整约束条件 - 已找到子记录”。最简单的情形下,我们倒是可以先
  • 时序约束

    千次阅读 2018-08-03 11:23:44
    一、在给FPGA做逻辑综合布局布线时,需要在工具中设定时序的约束。通常,在FPGA设计工具中都FPGA中包含有4种路径:从输入端口到寄存器,从寄存器到寄存器,从寄存器到输出,从输入到输出的纯组合逻辑。通常,需要...
  • 约束理论

    千次阅读 2017-12-12 15:49:34
    M.Goldratt)在他开创的优化生产技术(Optimized Production Technology,OPT)基础上发展起来的管理哲理,该理论提出了在制造业经营生产活动中定义消除制约因素的一些规范化方法,以支持连续改进(Cont
  • 约束的最优化问题

    万次阅读 多人点赞 2016-11-01 01:12:13
    学习支持向量机SVM时,拉格朗日对偶、Slater条件、KKT条件等一大堆概念席卷而来,让没系统学习过凸优化的笔者一头雾水,估计不少人都是这样吧。 为什么要引入一堆系数把约束条件与目标函数组合到一起?为什么满足了...
  • 在第一个截止期限错失时刻,通过分析系统的运行情况,推导出具有优先约束的实时任务可调度的充分条件。在系统运行前,判定周期任务的可调度性,预分配足够的处理机。当非周期任务到达系统时,在保证周期任务可调度的前提...
  • 差分约束

    千次阅读 2012-02-08 20:59:06
    在一个差分约束系统中,线性规划矩阵A的每一行包含一个1一个-1,A的所有其他元素都为0。因此,由Ax≤b给出的约束条件是m个差分约束集合,其中包含n个未知元。每个约束条件为如下形式的简单线性不等式:xj-xi≤bk(1...
  • 主题本 OBE 教程包括下列主题:概述情景验证前提条件在 ODI 中新建项目为 XML 文件插入新模型为数据库表 CLIENT 插入模型删除 CITY_CLIENT 的约束副本在 CLIENT 数据存储上设置 ODI 约束导入知识模块
  • 数据库 完整性约束

    千次阅读 2019-05-24 14:57:42
    数据完整性分为四类: 实体完整性:规定表的每一行在表中是惟一的实体。 域完整性:是指表中的列...用户定义的完整性:不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完...
  • 创建主键,外键和约束

    千次阅读 2009-03-11 14:01:00
    关系数据库的数据必须遵循的约束实体完整性:所有主属性均不可取空值,不仅仅是主码不可为空参照完整性:外键或者是空值,或者必须作为引用表的主键值而存在。用户自定义完整性一个表只能有一个主键!!!多于一个可...
  • 在满足煤炭开采安全规程瓦斯抽采达标等规范要求前提下,以煤与瓦斯共采中煤炭开采、采前瓦斯预抽、采中瓦斯抽采、采空区瓦斯抽采等各个阶段关键的时间点、空间点的煤炭回采与瓦斯抽采两子系统间相互促进相互制约...
  • 系统分析设计方法之系统分析

    千次阅读 2019-01-11 15:41:47
    系统分析处于从项目触发到形成项目章程,从项目章程扩展到项目需求,再到需求的逻辑过程分析,最后到可行性方案的确定。整个系统分析在项目管理周期过程中处于项目整体管理的制定项目章程环节,分析的是业务需求。...
  • 这周某系统上线,有一个需求就是,为一张表修改唯一性约束,原因就是之前发现,由于唯一性约束设置不当,导致业务处理出现异常。举例来说,如下测试表,原先唯一性约束是ab俩字段,但发现实际业务中,ab的组合是...
  • 第4章 约束与规则

    千次阅读 2019-07-31 10:55:51
    第4章 约束与规则 在关系型数据库中确保数据完整性的主要手段就是...其中,主键约束和唯一约束的作用都是确保设置该约束的列输入值的唯一性;外键约束是在5个约束中唯一一个涉及2张表的约束。 4.1 主键约束—PRIMARY...
  • FPGA 时序约束几种方法

    千次阅读 2016-12-06 23:09:55
    对自己的设计的实现方式越了解,对自己的设计的时序要求越了解,对目标器件的资源分布结构越了解,对EDA工具执行约束的效果越了解,那么对设计的时序约束目标就会越清晰,相应地,设计的时序收敛过程就会更可控。...
  • 浅谈约束理论

    千次阅读 2018-05-13 14:06:43
    先从下定义来谈什么是约束理论,约束理论(Theory of Constraints, TOC)是以色列物理学家、企业管理顾问戈德拉特博士(Dr.Eliyahu M.Goldratt)在他开创的优化生产技术(Optimized Production Technology,OPT)基础...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,155
精华内容 16,062
关键字:

系统约束和前提条件