自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

林伏案的博客

伏案的学习笔记

  • 博客(267)
  • 收藏
  • 关注

原创 poj1981(几何极限情况)

/*translation: 给出若干个点的位置,求一个半径为1的圆最多能够覆盖多少个点?solution: 极限情况 先枚举两个点,假设这两个点恰好在圆上。然后计算这个圆包含的点个数即可。note: * 还有一种更为高效的写法,枚举一个点,假设该点在圆x上,则圆心必然在以该点为圆心的圆i上。此时x要覆盖尽量多的点, 所以对以枚举的点为圆心的圆求出和其他点为圆心的圆的交点,被覆

2017-02-25 09:22:48 503

原创 aoj2308(#离散化,极限情况)

/*translation: 可以从任意方向以速度v发射一只白鸟,可在任意时刻产下一枚卵。发射后鸟将以抛物线轨迹飞行。空中有若干障碍物,问鸟 产下的卵是否能击中目标(x,y)solution: 极限情况的离散化note: * 考虑到鸟的飞行轨迹是无数种方案的,所以只需考虑其中的极限情况,即擦着障碍物的边飞过去。所以可以枚举飞行轨迹 经过的点,也就是

2017-02-22 16:57:31 444

原创 poj2932(几何扫描线)

/*translation: 给出n个两两不相交的圆,求出那些不被任何圆包含的圆的编号solution: 平面几何扫描线note: * 首先对每一个圆的水平方向的两个端点进行排序处理。然后用一条扫描线从左到右扫描。遇到圆的左端点 就判断是否被其它圆包含,如果是,加进set容器中(保存的全是没有被包含的圆)。遇到右端点,从容器 中删除 *

2017-02-22 16:55:57 497

原创 poj1127(计算几何,并查集)

/*translation: 给出n根木棍的端点位置,然后问任意两个木棍是否连通solution: 计算几何,并查集 首先计算出任意两个木棍之间是否有公共端点,如果有,就对两个木棍的编号进行并查集的unite操作。 这样到最后只需要判断根节点是否相同即可。*/#include #include #include #include using nam

2017-02-22 16:54:45 289

原创 hdu4322(*最小费用流)

/*translation: n颗糖果,m个孩子。每个孩子有若干个自己喜欢的糖果。一旦这个孩子得到一颗自己喜欢的糖果,这个孩子的欢乐值上升k。如果 得到一颗普通的糖果,欢乐值上升1,一旦孩子的欢乐值达到b[i],这个孩子就很开心。问能否有一种分配方法,使得所有的孩子 开心?solution: 网络最小费用流note: * 由于边费用1的不好处理,所以可以i先处理边费用为k的,再上面

2017-02-21 16:52:32 392

原创 hdu4780(*最小费用流)

/*translation: M台机器要生产n个糖果,遵循如下规则: 1.糖果i的生产区间在(si, ti),花费是k*(pi-si),pi是实际开始生产的时间 2.机器j从初始化到生产糖果i所需的时间Cij,花费是Dij 3.任意机器从生产糖果i到生产糖果j,需花费时间Eij,花费Fij 求生产完所有糖果所需的最小时间?solution: 最小费用流note: * 从s到每个

2017-02-21 16:51:35 380

原创 poj3680(*最小费用流)

/*translation: 见小白书p246solution: 最小费用流 对于一个区间,在a,b之间连上一条容量1,费用w的边,表示选中这个得到w。区间内部点之间i,i+1之间连上一条 容量无穷,费用0的边。每个a与s相连,容量1,费用0。每个b同理。这样建图之、后跑最小费用流即可。note: **/#include #include #inclu

2017-02-19 22:30:57 686

原创 hdu4411(#最小费用流)

/*translation: n个城市,从0出发,要遍历所有得城市。在访问城市i之前必须已经访问完所有j(j<i)得城市。现在最多有k 个人,求这k个人遍历完所有的城市所走的最小距离。solution: 最小费用流 添加源点、汇点。源点和0之间添加容量为k,费用0的边。0和汇点添加容量k,费用0的边(因为不必k个人全都用) 将每个点拆成i、i+n。i、i

2017-02-19 16:38:37 247

原创 poj1149(*网络流建模方法,paper题)

/*translation: 有M个猪圈,每个猪圈里初始时有若干头猪。一开始所有猪圈都是关闭的。依次来了N个顾客, 每个顾客分别会打开指定的几个猪圈,从中买若干头猪。每个顾客分别都有他能够买的数量 的上限。每个顾客走后,他打开的那些猪圈中的猪,都可以被任意地调换到其它开着的猪圈里, 然后所有猪圈重新关上。问总共最多能卖出多少头猪。(1 <= N <= 100, 1

2017-02-18 23:32:22 309

原创 poj3422(*最小费用流)

/*translation: 一张图的每个坐标上都有一些数字,现要从左上角走到右下角,只能往右或者往下。每一步的得分会在原有 基础上加上坐标上的数字。并且之后把该坐标上的数字清零。求上述过程重复k次之后得分最大值是多少?solution: 最小费用流 很明显只要做一遍容量为k的最小费用流即可。但是难点在于如何满足条件:一个点可以走多次,但是值只能 算一次

2017-02-12 17:39:52 386

原创 poj3686(*最小费用流-转化成普通指派问题)

/*translation: 有n个订单要交给m个工厂完成。给出每个订单在每个工厂的完成时间。求一个最佳方案使得完成所有订单的平均时间最短。solution: 最小费用最大流 如果每个工厂只能完成一个订单的话,那就是指派问题了。跑一遍最小费用流即可。但是题目每个工厂可能完成多个。 所以需要将其拆点使得每个工厂只能完成一个订单,进而转换成指派问题。对一个工厂来说,

2017-02-11 12:36:49 1231

原创 poj2135(*最小费用最大流)

/*translation: 给出一张图,求从1~n再从n~1的最短路径是多少?注意同一条路径不能走两次!solution: 最小费用最大流 这个问题可以转化为求2条从1~n不相交的路径,进而就是直接求从1~n的流量为2的最小费用流。note: * 本质上是求从1~n的流量为2的最小费用流 # 不能直接用两次dijkstra来求。(将第一次走过的路删掉

2017-02-11 10:46:46 2226 2

原创 poj3469(*最小割模型)

/*translation: 要在核A与核B组成的双核cpu上面运行n个模块,给出每个模块在核A、核B上运行的时间。除此之外,接下来还有m组需要交换数据的 模块。每当两组模块在一个核上运行时,不需要任何的额外花费,反之需要一定的额外花费。求运行完n个模块所需的最少时间。solution: 网络流最小割 这道题的本质就是求一个分组方案,在核A上面运行一组,在核B上

2017-02-09 22:17:19 328

原创 poj3281(#网络流最大流)

/*translation: n头牛,f种食物,d种饮料。每头牛有各自喜欢的食物和饮料。而每种饮料和食物只能分配给一头牛。最多能够有多少头 牛可以同时得到喜欢的食物和饮料。solution: 最大流 为了保证一头牛只享有一份食物和饮料。必须把牛拆成两点。一边和对应喜欢的食物连接,一边和对应喜欢的饮料连接。 然后每条边的容量是1.求最大流即可。note:

2017-02-09 20:30:30 254

原创 poj3057(*二分图匹配建模)

/*translation: 给出一张图,其中'.'代表人,'*'代表墙壁,'D'代表门。每道门在同一时刻只能通过一个人。问能否在 一定时间内使得所有人离开地图。若能,输出最后一个人的离开时间。若不能输出impossible。solution: 二分图匹配 将不同时刻的门看成是一侧的点。先预处理出所有人到各个门的最短距离。然后就是将门拆点,即拆成不同 时

2017-02-09 16:07:12 269

原创 poj2226(*行列模型,二分图最小顶点覆盖)

/*translation: 给出一张图'.'代表普通草地,‘*’代表泥地。有宽度固定为1,长度任意的木板。求至少要用多少块木板 才能覆盖所有的泥地而不覆盖任何的草地。solution: 二分图最小顶点覆盖 考虑以木板作为结点。分为两部分,一部分是横木板,一部分是竖木板。将横木板和竖木板都覆盖住的 泥地作为连接两边结点的边。这样求最小顶点覆盖即可实现每个

2017-02-08 16:05:27 541 1

原创 poj2724(*二分图最大独立集)

/*translation: 给出一台机器的操作序列。每次的操作都将产生若干结果。比如011操作产生结果011,*11操作产生结果011 和结果111...以此类推。现在给出若干个操作序列。求最少能用多少个操作完成这些结果。solution: 二分图最大独立集合 实际上就是求二分图最大独立集合,因为*能够同时当作01用,所以操作中应该尽量用*合并两个结果。所以

2017-02-08 10:11:05 274

原创 poj3692(二分图最大独立集)

/*translation: 一群男孩女孩,同性之间都相互认识,但是异性之间只有某些人认识彼此。给出相互认识的异性的各自编号。 然后求组成一个小队,这个小队里的人都相互认识。问这个小队最多能有多少人。solution: 根据 最大独立集合+最小顶点覆盖=点数 以及 二分图当中,最大匹配=最小顶点覆盖即可求出来note:*/#include #include #

2017-02-07 13:06:04 252

原创 poj1466(二分图求最大独立集合)

/*translation: 有n个学生,并且给出男女之间的暧昧关系。现在求一个学习小组,使得里面的任何两个人之间不能有暧昧关系。 求这个学习小组最多能够有多少人?solution: 二分图求最大独立集合 首先明白一个定理:|最大独立集合| + |最小顶点覆盖| == |V|。且在二分图当中有|最大匹配| == |最小顶点覆盖| 所以只要求出最大匹配即可

2017-02-06 12:20:39 469

原创 poj1486(二分图匹配)

/*translation: 有一堆透明的讲义堆叠在一起,每个讲义上的随机一个位置会有讲义的标号。因为讲义是透明的,所以堆叠在 一起的讲义使得这些标号分不清各自对应的讲义。现在要求你求出那些能够确定对应关系的讲义以及对应的标号。solution: 二分图匹配 首先当标号的位置落进某一个讲义的覆盖面积之内,这个标号很可能就是讲义对应的标号。所以连上一条边。

2017-02-06 10:25:40 485

原创 poj2112(二分网络流)

/*translation: 有c头奶牛和k台挤奶机,每台挤奶机器最多能够同时服务m头奶牛。且每个物体之间有一定的距离。 求一种分配方案,使得每头奶牛能够分配到机器的同时,最小化奶牛所走的最长距离。solution: 二分+最大流 看到最小化最大值之类的很容易想到用二分枚举答案。然后就是判定是否可行了。方法是每枚举一次, 就重新建图。建图时将距离超过枚举

2017-02-04 20:34:53 257

原创 poj3155(网络流最大密度子图模型)

/*translation: 公司里面有若干职员,每个职员都有一个或者若干个和自己不和的人,如果让两个不和的人在一起工作,则效率必然下降。 定义一个hard因子。hard:=互相不和的职工对数 / 总人数。现在求从公司里面选出一些人出来,使得hard因子最大。solution: 网络流解决最大密度子图。 paper题,参考论文“最小割模型在信息学竞赛中的应用”一

2017-02-02 12:04:10 520

原创 poj2914(stoer-wagner算法求解全局最小割)

/*translation: 给出一副无源汇的无向图,求其最小割。solution: 原本的想法是枚举源汇,然后DINIC最大流。然而这样必然超时。所以必须有一种办法能够快速求出 全局最小割,这种算法就是stoer-wagner算法。具体方法见链接:http://blog.sina.com.cn /s/blog_64018c2501011dd7.html以及http://blog.si

2017-01-30 16:13:32 501

原创 poj2987(网络最大流求最大闭合子图权值)

/*translation: 给出一张单向图,每个结点有固定的权值。每次选择一个点的同时,与该点单向连接的点也必须选择(比如u->v,选择u的同时 也必须选择v,但是对于k->u,k就不是必选的。)现在求一种选择方案使得其选择的权值最大的同时,选择的点数目最小。solution: 网络流求最大闭合子图的权值 具体的做法参考“最小割模型在信息学竞赛中的应用”这一论

2017-01-29 22:17:53 1272 1

原创 poj1795(状态压缩dp,字符串压缩求最小字典序)

/*translation: 给出n个字符串,求一个最小长度的串,该串包含给出的所有字符串。注意该字符串在长度最小的同时还必须是字典序最小。solution: 状态压缩dp 注意到n的值比较小,所以考虑可以状态压缩。定义dp[i][s]:=在所有字符串选取情况为s的情况下,最前面的字符串为i号字符串 的最小长度。依次枚举下一个字符串可得状态转移方程 dp[i][

2017-01-27 12:12:32 1229 1

原创 poj3420(状态压缩+矩阵加速)

/*translation: 有4*n的矩形一个,求用1*2的砖块去铺可以有几种填充方法?solution: 矩阵加速+状态压缩 一看这道题以为是轮廓dp,但是由于n的值太大,所以无法进行轮廓dp,所以考虑用矩阵来加速。 如图片所示,在第n行铺完后第n+1行的情况可以有如图所示的几种情况。注意其中0101的状态是不可能出现的。因为如果出现0101 那么最

2017-01-26 21:03:07 349

原创 汇编代码存档

程序设计项目一data segment    dwdata endsend要求:只在定义的数据段'?'中加入相关的内容,使得上面的程序可以在屏幕中间显示一个绿色的字符'A'。 data segment dw 00b8h, 8eb8h, 0bec0h, 0140h, 02b4h, 61b0h, 8926h, 0b804h, 4c00h, 21cdhdata end

2017-01-24 12:47:11 673

原创 poj3411(状态压缩dp,dijkstra最短路)

/*translation: 给出一张图,求节点0到节点n-1花费的最小费用。对于一条边a->b,可以有一下两种不同的付费方式: 1.在点c提前预付,但此时必须经过点c,花费为r 2.在点b支付,花费为psolution: 状态压缩dp+dijkstra dp[i][s]:=走到i点时的最优解,且此时走过的点状态为s(包括i) 然后根据dijkstra不断松弛即可。note:

2017-01-20 10:58:52 299

原创 poj3233(矩阵幂)

/*translation: 给定矩阵A,求A + A^2 + ... + A^ksolution: dp,矩阵幂note: * 关键在于矩阵递推式的构造,可以先写出所有的状态递推关系,然后根据这些递推关系构造出矩阵的递推式。date: 2017.1.17*/#include #include #include using namespace std;typedef

2017-01-19 13:13:19 295

原创 poj2836(状压dp)

/*translation: 二维平面上有n个点,现在求用长宽任意的矩形完全覆盖这些点所用的最小矩形面积总共是多少?solution: 状压dp dp[s]:=当前状态下最小面积 dp[当前状态] = min(dp[过去状态] + 矩形面积, dp[当前状态])note: # 这里注意,先对所有矩形进行预处理的时候,当要枚举的矩形的两个顶点在同一行或者同一列的点时,由于不允许面积为

2017-01-19 13:11:47 378

原创 poj3734(矩阵幂)

/*translation: 用红、黄、蓝、绿四种颜色对n个砖块进行染色。问红、绿砖块都为偶数的方案总共有多少种?solution: 矩阵幂,小白书p203 设染到第i块时红绿砖块都为偶数的方案为ai,红绿砖块一奇一偶方案数为bi,红绿都是奇数的方案数为ci 则可以有如下的递推: a(i+1) = 2*ai + bi b(i+1) = 2*ai + 2*bi + 2*ci c(i

2017-01-17 21:53:34 249

原创 uva10163(两次dp)

/*translation: 见lrj紫书p306solution: 普通dp 分成两次来求解,状态的定义以及状态转移方程见代码注释note:date: 2017.1.16*/#include #include #include using namespace std;const int INF = 1e6;int dp1[105][105]; //dp1[i]

2017-01-16 21:10:01 273

原创 uva1632(区间dp)

/*translation: 直线上有n个点,每个点会在经过各自特定的时间后消失。问从任意位置出发走过所有的点的最短时间是多少?solution: 区间dp dp[i][j][0]表示i~j区间里的点都走完了,且最后停留在i点。 dp[i][j][1]表示i~j区间里的点都走完了,且最后停留在j点。 具体状态转移方程见代码。note: # 一开始的思路是按照TSP解决,后来发现

2017-01-16 17:27:52 372

原创 uva1631(DP记忆化搜索)

/*translation: 有一串密码锁,每次能够让相邻的1~3位数字向上或者向下旋转一格。给出目标状态和起始状态,问最少需要旋转几次?solution: 记忆化搜索dp 令dp(int pos, int a, int b, int c)其中pos是当前的位置,a,b,c分别是pos,pos+1,pos+2上的数字。此时 pos前面的位置都已经旋转完毕,不需要再次旋转了。那么就可以求

2017-01-16 15:43:50 962

原创 uva242(转换成完全背包dp)

/*translation: 一个信封最多能够贴s张邮票,现在有n个邮票的集合,求能够连续覆盖最大的值的邮票的集合。并打印出能够 i连续覆盖的最大的值。solution: 完全背包dp的可行性解法 设dp[i][j]:=前i种物品能够达到j值的所用最少的张数。然后即可按照完全背包的滚动数组dp来求解。 之后从1开始遍历,一旦遇到所需张数大于s的话,那么所能够连续覆盖的最大的值就是此时

2017-01-15 21:01:25 718

原创 uva1630(dp记忆化搜索)

/*translation: 将一串字符串折叠成一串尽量短的字符串solution: 记忆化搜索dp 可以看出一串字符串有3种情况: 1.字符串本身就已经是最简短 2.可以折叠成某一个更短的字符串 3.只有一部分能够折叠成更短的字符串,这时需要分成两部分来求解,需要遍历来确定拆分的位置 根据以上3种情况即可编码note: * 字符串折叠类型的题可以考虑区间dp和记忆化搜索

2017-01-14 21:32:56 822

原创 poj3254(常见的二维状压dp)

/*translation: 给出一个n行m列的草地,1表示肥沃,0表示贫瘠,现在要把一些牛放在肥沃的草地上,但是要求所有牛不能相邻,问你有多少种放法solution: 状态压缩dp 每次枚举时候判断是否符合当前草地的情况,再判断是否跟前面的一行兼容。note: * 将所有合法状态预先处理存进一个数组里面即可提高速度 # 一开始check(i, s)WA了好多次,后来发现应该是ch

2017-01-01 01:19:02 295

原创 poj2441(状压dp)

/*translation: 要给n头牛分配m个牛舍,每头牛有自己喜爱的若干牛舍。问总共有多少种分配方法?solution: 状态压缩dp即可。dp[s]表示到状态s的方案数目note: * 注意用__builtin_popcount(s)函数来判断1的个数是否满足转移的条件。date: 2016.12.31-----跨年题。希望17年赛季能够拿个牌子!!*/#include

2016-12-31 21:52:04 332

原创 poj2686(TSP)

/*translation: 一张图由n个点构成,并且若干个点之间由双向边连成。有若干票,每次走完一个边花费一张票 花费时间是边的长度 / 票的权重。求从指定起点到终点所用的最短时间。solution: 状压dp 首先观察数据,发现n比较小,很容易看出对n进行状态压缩。设置dp[s][v]表示状态s下,到达节点v所用的最短时间。 其中s表示已经使用的车票

2016-12-23 22:34:39 463

原创 hdu4578(线段树多种区间操作)

/*translation: 对于一个区间有4个操作: 1.将a~b都加上c 2.将a~b都乘上c 3.将a~b都变成c 4.查询a~b的每个数的p次方的和。(p=1,2,3)solution: 典型的线段树应用,不过增加了多种操作。一开始没写对,WA了好久,后来意识到更新的时候各个sum之间更新顺序 是有讲究的,于是改了过来,然而还是WA。最后憋得没办法,看题解才发现各个懒惰标

2016-12-04 11:23:11 2517

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除