摘要: 题意: 已知有 N 个牛棚,且每个牛棚在一开始的时候有一定数量的牛,每个牛棚可以用来让牛避雨,但容量都有一定的限制,知道了一些牛棚之间的道路长度,问使得下雨时使所有牛都可以找到地方躲雨,且要使得所有牛中走过的路中的最大值尽可能小,并求出该最大值分析: 建图:将每个牛棚拆成两个点v,v` 建立一个源点 s =0 , 在 s 和每个点 i 之间连一条容量大小为该牛棚初始牛数量的边, 建立一个汇点 t =2*n+1 在 每个点 i+n 和 t 之间连一条容量大小为该牛棚容量的边。 如果点 u 和 v 满足条件,就在 u 和 v +n ,v 和 u+n之间连一条容量大小为 INF 的边。 如果最大流 阅读全文
posted @ 2012-08-14 17:10 'wind 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 题意: 一个三层书架,现要把一些高度和厚度不等的书放进书架,每层至少放一本,问书架面积最少是多少,且要保证书架是矩形的。 分析: 先对书按从高到低排序,不妨把最高的一本书放在第一层,这样第一层的高度就不用考虑了 dp[i][j] 表示第二层厚度为 i ,第三层厚度为 j 时第二和第三层书架高度和的最小值#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>#define INF 601using namespace std;struct node{ int 阅读全文
posted @ 2012-08-14 14:41 'wind 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 题意: 给出一个A~Z的置换,问是否可以被表示为一个置换的平方(即G=G'*G')结论: 通过观察可以发现: 一个置换乘上它本身,其中长度为偶数的循环节必然会分裂为两个长度相等的循环节,长度为奇数的循环节还是一个循环节,长度不变 ○ 置换中长度为偶数的循环节必然是原置换中的循环节分裂出来的○ 长度为奇数的循环节有可能是原置换中的循环节分裂出来的 因为只要判断能否被表示,所以可以忽略长度为奇数的循环节,只对长度为偶数的循环节进行考虑即可。 因为一个长度为偶数的循环节分裂出来的两个循环节的长度相等且同为原循环节长度的一半, 所以,只要给出置换中所包含的长度为偶数的循环节能一一配对, 阅读全文
posted @ 2012-08-14 11:24 'wind 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 题意: 知道了一个序列a[1]..a[n] ,给出 m 个约束条件,① st sn gt ki 表示a[st]+a[st+1]+..a[st+sn]>ki ② st snlt ki表示a[st]+a[st+1]+..a[st+sn]<ki 问是否存在这样的 a[i] 序列。分析: 将上面的两个不等式等价转换建立差分约束系统 将 ① 变为s[st-1]-s[st+en] < -ki <=-ki-1 将 ② 变为s[st+en]-s[st-1] < ki <=ki-1 求解这个差分约束系统,看最后有无冲突// gt dis[s[i].en]-dis[s[i].s 阅读全文
posted @ 2012-08-14 10:26 'wind 阅读(215) 评论(0) 推荐(0) 编辑