随笔分类 - OI题解
摘要:It is my first Codeforces round!Problem C题目大意:一个平面内有一些无限长的直线,把平面分成了若干块,从一块走一步可以走到与它有公共边的另一块,但是只有公共点不能一步走过去。给定两个在块内部的点,问从S点到T点最少走几步。题目分析:由于每步只能跨越公共边,不能...
阅读全文
摘要:题目链接:BZOJ - 1042题目分析首先 Orz Hzwer ,代码题解都是看的他的 blog。这道题首先使用DP预处理,先求出,在不考虑每种硬币个数的限制的情况下,每个钱数有多少种拼凑方案。为了避免重复的方案被转移,所以我们以硬币种类为第一层循环,这样阶段性的增加硬币。一定要注意这个第一层循环...
阅读全文
摘要:题目链接:BZOJ - 1066题目分析题目限制了高度为 x 的石柱最多可以有 x 只蜥蜴从上面跳起,那么就可以用网络流中的边的容量来限制。我们把每个石柱看作一个点,每个点拆成 i1, i2,从 i1 到 i2 连一条边,容量为这个石柱 i 的高度,即跳跃次数限制。来到这个石柱就是向 i1 连边,从...
阅读全文
摘要:题目链接:BZOJ - 1084题目分析我看的是神犇BLADEVIL的题解。1)对于 m = 1 的情况, 首先可能不取 Map[i][1],先 f[i][k] = f[i - 1][k]; 再考虑取一段新的的情况,用 max(f[j][k - 1] + Sum[i][1] - Sum[j][1])...
阅读全文
摘要:题目链接:BZOJ - 1070题目分析首先想到拆点,把每个技术人员拆成 n 个点,从某个技术人员拆出的第 i 个点,向某辆车连边,表示这是这个技术人员修的倒数第 i 辆车。那么这一次修车对整个答案的贡献就是,i * Time[j][k]。 j 是车的编号,k 是技术人员编号。因为这辆车以及之后这个...
阅读全文
摘要:题目链接:BZOJ - 1878题目分析题目的询问是某个区间内的颜色种类数,所以我们希望这个区间内的每种颜色只被计数一次,那么我们就选取询问区间内的每种颜色第一次出现的元素计数,之后再出现已经在询问区间中出现过的颜色就不再计数。考虑一种离线算法,如果我们将所有询问按照询问区间的左端点排序,那么所有询...
阅读全文
摘要:题目链接: BZOJ - 3110题目分析这道题是一道树套树的典型题目,我们使用线段树套线段树,一层是区间线段树,一层是权值线段树。一般的思路是外层用区间线段树,内层用权值线段树,但是这样貌似会很难写。多数题解都使用了外层权值线段树,内层区间线段树,于是我就这样写了。每次插入会在 logn 棵线段树...
阅读全文
摘要:题目链接:HDOJ - 1171题目大意有 n 种物品,每种物品有一个大小和数量。要求将所有的物品分成两部分,使两部分的总大小尽量接近。题目分析令 Sum 为所有物品的大小总和。那么就是用给定的物品做完全背包,背包容量为 (Sum / 2) ,得到的结果是较小的一部分的大小。完全背包问题可以使用单调...
阅读全文
摘要:题目链接:POJ - 1742题目大意现有 n 种不同的硬币,每种的面值为 Vi ,数量为 Ni ,问使用这些硬币共能凑出 [1,m] 范围内的多少种面值。题目分析使用一种 O(nm) 的 DP (据说这是类多重背包?),枚举每一种硬币,对于每一种硬币 i 枚举每一个面值 j ,如果这个面值 j 使...
阅读全文
摘要:题目链接: BZOJ - 2004题目分析看到题目完全不会。。于是立即看神犇们的题解。由于 p#include #include #include #include #include using namespace std;const int MaxMap = 130 + 5, Mod = 3003...
阅读全文
摘要:题目链接:BZOJ - 1875题目分析: 这道题如果去掉“不会立刻沿着刚刚走来的路走回”的限制,直接用邻接矩阵跑矩阵乘法就可以了。然而现在加了这个限制,建图的方式就要做一些改变。如果我们把每一条边看做点建矩阵,那么每次从一条边出发都只会到其他的边,不能仍然在这条边上“停留”,所以这就可以满足题目...
阅读全文
摘要:题目链接:BZOJ - 2165题目分析: 这道题我读了题之后就想不出来怎么做,题解也找不到,于是就请教了黄学长,黄学长立刻秒掉了这道题,然后我再看他的题解才写出来。。Orz 使用 DP + 倍增 ,用状态 f[x][i][j] 表示从 i 出发,坐 x 次电梯到达 j ,最多能上升的层数。开始...
阅读全文
摘要:题目链接:BZOJ - 3172题目分析: 题目要求求出每个单词出现的次数,如果把每个单词都在AC自动机里直接跑一遍,复杂度会很高。 这里使用AC自动机的“副产品”——Fail树,Fail树的一个性质是,一个字符串出现的次数,就等于以它的结点为根的Fail树中的子树中所有结点的 Cnt 和。 ...
阅读全文
摘要:Problem Link : BZOJ 3747题解:ZYF-ZYF 神犇的题解 解题的大致思路是,当区间的右端点向右移动一格时,只有两个区间的左端点对应的答案发生了变化。 从 f[i] + 1 到 i 的区间中的答案增加了 W[A[i]], 从 f[f[i]] + 1 到 f[i] 的区间的答...
阅读全文
摘要:题目链接 : BZOJ 1085题目分析 : 本题中可能的状态会有 (2^24) * 25 种状态,需要使用优秀的搜索方式和一些优化技巧。 我使用的是 IDA* 搜索,从小到大枚举步数,每次 DFS 验证在当前枚举的步数之内能否到达目标状态。 如果不能到达,就枚举下一个步数,重新搜索,即使某些...
阅读全文
摘要:题目链接:BZOJ 1072这道题使用 C++ STL 的 next_permutation() 函数直接暴力就可以AC 。(使用 Set 判断是否重复)代码如下:#include #include #include #include #include #include #include using...
阅读全文
摘要:题目链接:BZOJ 1053想一想就会发现,题目让求的 1 到 n 中最大的反素数,其实就是 1 到 n 中因数个数最多的数。(当有多于一个的数的因数个数都为最大值时,取最小的一个)考虑:对于一个整数 n ,如何求 n 的因数的个数? 将 n 分解质因数,n = p1^a1 * p2^a2 * p...
阅读全文
摘要:题目链接:BZOJ 1045Attention:数据范围中 n #include #include #include #include #include using namespace std;const int MaxN = 1000000 + 5;int n;typedef long long ...
阅读全文
摘要:题目链接:BZOJ 1044第一问是一个十分显然的二分,贪心Check(),很容易就能求出最小的最大长度 Len 。第二问求方案总数,使用 DP 求解。 使用前缀和,令 Sum[i] 为前 i 根木棍的长度和。 令 f[i][j] 为前 i 根木棍中切 j 刀,并且满足最长长度不超过 j 的方案...
阅读全文
摘要:题目描述Description风景迷人的小城 Y 市,拥有n 个美丽的景点。由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务。观光公交车在第0 分钟出现在1号景点,随后依次前往2、3、4……n 号景点。从第i 号景点开到第i+1 号景点需要Di 分钟。任意时刻,...
阅读全文