摘要: 如果能想到费用流,这道题就是显然了。 要求所有人的等待平均时间最小,也就是所有人的总等待时间最小。 每辆车只需要修一次,所以s连每辆车容量为1,费用为0的边。 现在需要把每个人拆成n个点,把车和每个人的第k个点连一条容量为1,费用为cost[i][j]*k的边。 最后把每个人拆完后的点向汇点连一条容 阅读全文
posted @ 2017-03-04 23:08 free-loop 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 很普通的拆点网络流,把每个柱子拆成两个点(i,j,0)和(i,j,1).对于柱子的高度限制则加边((i,j,0),(i,j,1),height). 两个柱子能互相到达则加边((i,j,1),(i1,j1,0),INF). 能到达边界的柱子加边((i,j,1),t,INF).有蜥蜴的柱子加边(s,(i 阅读全文
posted @ 2017-03-04 19:38 free-loop 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 求最大01相间子矩阵可以转换为求最大全0子矩阵。只需把棋盘(x+y)为奇数的取反,而该问题可以用经典的悬线法O(n^2)的求解。 悬线法呢。 首先定义b[i][j],为a[i][j]向上的最大连续0的长度。可以O(n^2)递推求出。 l[i][j],为b[i][j]向左边的最大连续序列的长度,该连续 阅读全文
posted @ 2017-03-04 18:38 free-loop 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 很显然的区间DP,定义dp[i][j][k], 如果dp[i][j][k]=1表示字符串[i,j]可以组成k字符。 # include <cstdio> # include <cstring> # include <cstdlib> # include <iostream> # include <v 阅读全文
posted @ 2017-03-04 16:55 free-loop 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 很好的一道题。。 首先把边权排序。然后枚举最小的边,再依次添加不小于该边的边,直到s和t联通。用并查集维护即可。 # include <cstdio> # include <cstring> # include <cstdlib> # include <iostream> # include <ve 阅读全文
posted @ 2017-03-04 14:58 free-loop 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 刚开始用二维RMQ直接给超内存了。。。 用单调队列可以做到O(n^2)的复杂度。具体是先把每行用单调队列处理一下。再把处理后的用列单调队列处理下。 # include <cstdio> # include <cstring> # include <cstdlib> # include <iostre 阅读全文
posted @ 2017-03-04 14:41 free-loop 阅读(140) 评论(0) 推荐(0) 编辑