poj
DickensTone
这个作者很懒,什么都没留下…
展开
-
poj 3009
因为有对步数的限制,这个题可以直接暴力dfs。需要注意的是,在选择方向的时候才加一个步数。能撞墙的前提得是,这个球是运动的。#include#include#includeusing namespace std;const int maxn = 20 + 5;bool G[maxn][maxn];int r, c;struct node{ int x原创 2017-11-07 11:07:39 · 159 阅读 · 0 评论 -
poj 1258
大意:有一个小镇,镇上有一些农场。用以光纤把所有农场联通,最少需要多少光纤。最小生成树,prim或者kruskal。prim#include#include#includeusing namespace std;const int maxn = 100 + 5;const int inf = 1e9 + 10;int cost[maxn][maxn], mincost[maxn], n原创 2018-01-18 21:22:28 · 242 阅读 · 0 评论 -
poj 3268
题意:有n个农场,每个农场有一头牛。每个农场都有单向的通道到下一个农场。选择其中一个农场作为开party的农场。他们去了还得回来。每头牛都会选择耗时最短的方案,问这些牛之中,最长的时间是多少。就是求最短路,不过需要注意的是,数据量有点大。dijkstra 的时间复杂度要比floyd下,应优先考虑。#include#include#includeusing namespace std;con原创 2018-01-18 17:41:43 · 276 阅读 · 0 评论 -
poj 2139
题大意:有n头牛。若果它们之间有m牛拍过电影,那么m头牛之间的距离为一。如果没有一起拍过电影,那么需要通过认识的牛来计算距离。若只需找一头牛,那么距离为 1 + 1= 2.算出某头牛到所有牛的距离之和最短的值,并且除以路径条数(n- 1) 再乘 100。最短路求解#include#includeusing namespace std;const int maxn = 301;int原创 2018-01-16 18:49:00 · 242 阅读 · 0 评论 -
poj 2236
题意:给你一些电脑,全是坏的。你可以修。他们之间的最长通信距离为d,可以由中间电脑传递信息。一道简单的并查集,唯一比较麻烦的是需要遍历电脑来看它们能否联通,不过此题给的时间够大。#include#include#include#includeusing namespace std;const int maxn = 1001 + 5;int n, d;struct node{原创 2018-01-15 21:58:24 · 232 阅读 · 0 评论 -
poj 3614
题意:一些奶牛要晒太阳,可是它们需要防晒霜。每头奶牛对防晒霜有一定的要求,SPF值有在MIN 和 MAX之间。给一些防晒霜的SPF和数量问,最多有几头奶牛能够获得想要的防晒霜。怎样选择防晒霜呢。一款SPF尽量小防晒霜,应该给能使用的牛中,Max最小的牛用。因为,我们要的是SPF尽量小的防晒霜,所以之后的SPF都会比这个要大,Max大的牛比小的牛更有机会能使用。对,就是贪心。保持牛的Max尽原创 2018-01-14 11:13:42 · 150 阅读 · 0 评论 -
poj 3616
题意:有一头奶牛,它有不同的可以挤奶的时间段。且每一个产奶时间段的产量不一样。问,此奶牛的最大产量。我们找的状态是奶牛在时间点 x,所产生的最大奶量dp[x]。那么 dp[x] = max(dp[x], dp[j] + val)。j为之前的节点。若我们能够有序的更新x,那么j节点自然也就是最优解。#include#includeusing namespace std;con原创 2018-01-12 17:20:55 · 141 阅读 · 0 评论 -
poj 2393
题意:每一周产生牛奶的费用c和需求量y是不同的。牛奶可以保存,但每单元的牛奶保存一周需要费用s,问满足所有需求,最少的费用是多少?我们选牛奶的,看的是费用,费用分为两个,一当前的费用 ,二之前的费用。但是我们可以看成一个。维护的时候,若当前的费用小,则只需保存当前的费用,若之前的费用小,则不管当前费用。意思是:我们永远只维护一个最小值,因为如果牛奶要保存,我们肯定选取的是当前费用里,最原创 2017-12-19 16:59:03 · 417 阅读 · 0 评论 -
poj 2718
题意:给出一些数对这些数进行随意组合,每个数不能重复使用,形成两个数(不能有前导零)A,B。问A,B最小的差。直接dfs,数据不大,最多10个数。但也不能太盲目,两个数的差要小,这两个数的位数就要接近才行。我们就可以缩小搜索深度。就要就能A了。最求一下速度,我们可以剪枝,当搜索第二个数的时候,因为两个数,不可能有相同的数,所以,我们可以在第二个数的后面加零。若大于,则相减就是能得到原创 2017-11-28 11:34:01 · 149 阅读 · 0 评论 -
poj
这一题需要思考的地方在于,如何把陨石坠落的时间考虑在bfs的过程中。参考别人思路,每个点地图信息就存的是该点最早被破坏的时间。这样,我们在搜索的时候,注意已经用掉的时间 + 1 要小于 该点陨石坠落的时间就ok。坑点:题意给出了陨石区,但没有给出整个地图的大小,所以走出陨石区就绝对安全。#include#include#include#includeusing namespac原创 2017-11-26 11:04:21 · 194 阅读 · 0 评论 -
poj 2376
题意:有n头牛,他们有空的时间段是固定的。有T天,需要打扫T天的谷仓。问:最少需要多少头牛。若不能满足,输出-1明显贪心。需要注意的地方是,第一头牛,打扫了第一天,和第二天,下一头牛应该从第三天开始打扫。以开始时间排序,那么我们只需要一个一个往下找最优解,边找边跟新,当不能满足开始的时间#include#include#includeusing namespace s原创 2017-12-04 13:34:59 · 132 阅读 · 0 评论 -
poj 3781
题意:给你n个数。求出n个数的规律和(由相邻的数相加,每次减小一个数,直到只剩1个数)。这是杨辉三角的性质。好,接下来的全排列,可以使用STLd的next_permutation。这只比dfs慢一丢丢。#include#include#includeusing namespace std;const int maxn = 15;int n, ans;int yang原创 2017-12-03 14:52:14 · 206 阅读 · 0 评论 -
poj 3190
题意:每头奶牛拥有自己的可以挤奶的时间。且,每头牛都必须挤奶,而他们又不愿意在一间房,问最少需要造多少间房。可以用贪心做,依据开始时间排序。依次放奶牛(开始时间最小),若所有房间都没空,那么就再造一间房。判断房间状态,用for循环会超时,可以使用优先队列,队列排序是房间空的越早越排前。#include#include#includeusing name原创 2017-12-11 16:45:28 · 420 阅读 · 0 评论 -
poj 2546
题意:牛要打架,给出一些房子及他们的位置,问如何放c头牛使得他们之间的最短距离最大。利用二分法选择最短相距的距离,慢慢逼近最大值。#include#includeusing namespace std;const int maxn = 100000 + 5;int pos[maxn], n, c;bool putcows(int space){ int cnt = 1;原创 2017-12-10 15:54:53 · 185 阅读 · 0 评论 -
poj 1328
题意:有一条直线,在直线的一端有一些岛屿。问你在直线上放多少雷达能使所有岛屿被覆盖。如果岛屿能被覆盖,那么他们在直线上有两个极限值,刚刚好在这两个点上放雷达能够覆盖对应雷达。那么我们就可以贪心了。依据每个雷达能够接受的最大x排序,从左端开始选取最大x,直到不能满足条件,更新。坑点,雷达半径可为负#include#include#include#includ原创 2017-12-08 19:08:46 · 171 阅读 · 0 评论 -
poj 3723
题意:想要征m个女兵,n个男兵。每个兵需要10000。但是若兵是恋情关系,且他们的恋情是有价格的,那么征另一名与他(她)有关系的兵,只需10000 - x(他们的价值)。这个题明显最大生成树,我们把恋人的关系看成有权值的边。那么我们要找的是由这些边组成的最大的生成森林。需要注意的是不能有环,也就是,不能重复边(每个人可能有多种关系,且可能关系重复)。#include#include原创 2017-11-19 10:33:57 · 235 阅读 · 0 评论 -
poj 1182
参考挑战。这一题是并查集的灵活运用。有三种动物,他们存在两种关系。我们可以把三个物种的之间存在的关系,用并查集合并。然后查找与给出的关系冲突的关系是否存在。若存在,那么便是错误信息。若不存在,则把与之对应的正确的信息合并。给出的关系是1的时候,那么我们需要合并(x, y), (x + n, y + n), (x + 2 * n, y + 2 * n)。他们分别代表物种A,B,C。因为我转载 2017-11-14 11:02:59 · 138 阅读 · 0 评论 -
poj 3255
题意:从起点到终点,怎样走才是第二小的路径。参考挑战。这个题明显的最短路类型。但是又有一点不同,不同的是它是求次短路。次短路,肯定是在最短路的基础上衍生出来的。当最短路可以更新值的时候,那么它摒弃的那一条(原最短路)就可以用来更新次短路。挑战用的是Dijkstra算法,寻找一点与起点之间的最短路。(当与起点连接时,其路径值才不是inf)#include#include#incl转载 2017-11-17 15:16:35 · 237 阅读 · 0 评论 -
poj 2377
题意:给你一些边,把所有点连起来成树。若能连起来,求出边最大值的和。若不能输出-1;由于给的是边kruskal比prim要方便。-1WA了好几发。#include#includeusing namespace std;const int maxn = 20000 + 10;int pa[1000 + 10];struct node{ int x, y, cost; bo原创 2018-01-18 21:51:04 · 194 阅读 · 0 评论