差分约束法:
在题目中给出不等式条件,然后让我们求符合这些条件的值。
我们可以把所有的元素转换为图的顶点,把不等式的右边变为权值,构建一个图。
如:
v1 - v2 <= c
也就是说 v1 <= c + v2
即添加由v2指向v1的边 权值为c
给一个顶点赋一个初值,然后以其为起点,对图做最小路径的搜索。
一个顶点从起点到他的最短路径一定是满足所有条件的。
注意:c可能是负数( Bell-man,SPFA ),当有负值环的时候无解。
有时候题目没有直接给我们不等式,但是有条件。而这些条件等够转换成不等式。
最小表示法:
有些状态可以有一些规则的变化
如八皇后问题解,有的解是一样的,通过翻转,旋转之类的操作之后能得到一样的解。
而我们定义一个判断状态大小的条件。
不妨设为( p1 > p2 <=> ( x1 > x2 || (x1==x2 且 y1 > y2 ) ) (以八皇后为题)
八皇后问题的解保存为一些列的点{(x1,y1),(x2,y2).....}
集合间的大小判断规则如字符串的大小判断 点的大小判断是上面提到的。
这样 同过转换规则和大小判断规则。我们能够找出所有相同集合中最小的一个。
然后对每个解都进行求最小表示的操作,把它于之前所求的最小表示比较。如果一样,则这两种状态是一样的,舍弃。
如果不同,那么保存其表示,做为一种新的解。
在有些题目中,我们可以采用”偏矩形“的方法构建最小表示。即规定 长>宽
这样 我们在构建最小表示的时候 能够减少判断的次数。