
刷题
Bthsky
生命以痛吻我
展开
-
HDU 1198简单并查集
简单题,重点在于预处理的时候保证准确无误(不细心导致WA两次= =)。 思路如下: 对所有类型地图预处理,将其东西南北的走势保存在数组中,而后从上到下、从左到右依次遍历每一个点: 1.当左边的点与当前点相连时,将左边点最顶端的父亲指向当前的点。 2.当上边的点与当前点相连时,将上边点最顶端的父亲指向当前的点。 遍历完后即可得出答案~以下为代码实现:#include <iostream> #原创 2016-11-13 22:24:52 · 513 阅读 · 0 评论 -
HDU1224Free DIY Tour,SPFA入门
简单的最大生成树,使用SPFA算法可获最优解。 注意: 1.这里要求输出最大路径,因此执行松弛操作时需要同时记录路径信息。这里使用并查集的思想:即每一个结点只记录它的上一个城市。输出时使用递归后序输出即可。 2.这里的终点为n+1,初始化时不要忘了[n+1]城市。同时输出时应将“n+1”改为1号城市(PS:由于不是常用程序,这里没有free空间,读者可自行释放空间。) 以下为代码实现:#in原创 2016-11-18 09:01:47 · 470 阅读 · 0 评论 -
HDU1269 迷宫城堡,Tarjan算法入门
首先了解以下名词: 强连通:两个顶点a、b,若a有路径通向b、b亦有路径通向a,则称a、b两点 强连通(strongly connected)。 强连通图:如果有向图 G的任意两个顶点都强连通,称G是一个强连通图。 强连通分量:非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。 后向边 :子孙指向祖先的边Tarjan算法思想:原创 2016-12-10 10:43:53 · 478 阅读 · 0 评论 -
HDU2159 FATE,二维背包+完全背包
一个简单二维背包问题。主要思想:通过二维矩阵mapa[j][i]求解,横坐标代表耐力值,纵坐标代表经验值。con代表当前所能获得的最大经验值 1.初始化mapa[0][0]到mapa[m][N]为0。con为0。 2.初始情况下仅有mapa[m][0]= s ;即已获得零点经验,还剩m点耐力,还能杀s只怪。 3.读入一个怪的信息(经验值a ,耐力b ),而后遍历第0到第con列的每一个单元,当满足原创 2016-12-30 18:07:43 · 679 阅读 · 0 评论 -
HDU 2182 Frog,动态规划
此题不算难,不过鉴于讨论区及网络相关题解较少,我认为还是有写一下的必要。 直接介绍思想: ①对于每一次的跳跃必定存在最大值 ②本次跳跃的最大值为 :max(上一次跳跃中的某个结果 + 该结果对应位置可以获得的最大甲虫数) #注意到本次的最大值不一定来自于 上次的最大值+该位置对应可以获得的最大甲虫数,因此我们要记录上一次跳跃的所有结果(即mapa[i-1][1] 到mapa[i-1原创 2016-12-30 22:46:46 · 752 阅读 · 0 评论 -
HDU 2191 珍惜现在,感恩生活。将多重背包经二进制划分变为01背包。
多重背包问题,不同种类的大米有不同的袋数,要求在资金有限的情况下获得重量最大值。 直接求解有些困难,我们可以换个角度思考: 针对某种 p元/h千克 共c袋的大米(我们可以给它们标记为第M0、M1、、、Mc袋大米),它可能出现(2的c次方)种情况,即对每一袋独立的大米Mi (i=0~c)来说,它可能取0也可能取1(取或不取)。这不正是01背包的思想吗?哪要管袋数的限制,统统拆分为独立的一原创 2016-12-31 17:59:20 · 516 阅读 · 0 评论