- 博客(18)
- 资源 (46)
- 收藏
- 关注
原创 HDU 1074 Doing Homework(DP·状态压缩)
题意 有n个作业要做 给你每个作业的最后期限 和做完这个作业需要的时间 作业每超过最后期限一天就会扣一分 只能把一个作业做完了再做另一个作业 问做完所有作业至少扣多少分作业最多只有15个 看到这个数字容易想到是状态压缩 dp[i]表示i对应状态的最小扣分 i转换为二进制后为1的位表明该位对应的作业已经做了 为0的位没做 那么dp[i] = min{dp[k] + c
2015-08-28 14:47:03 1950
原创 HDU 1024 Max Sum Plus Plus (DP·滚动数组)
题意 从n个数的数组中选出不相交的m段 求被选数的和的最大值Max Sum 的升级版 不只是要选一段连续的了 而是选m段 思想还是类似 依旧dp状态和状态转移方程不是很难想 在 Max Sum 这个问题中 dp[i] 表示的是以第i个数结尾的一段的 Max Sum 由于这里还有一个多少段的状态 于是这里令 dp[i][j] 表示在前 i 个数中选取 j 组 且第 i 个
2015-08-27 10:02:55 994
原创 POJ 1128 Frame Stacking(拓扑排序·打印字典序)
题意 给你一些矩形框堆叠后的俯视图 判断这些矩形框的堆叠顺序 每个矩形框满足每边都至少有一个点可见 输入保证至少有一个解 按字典序输出所有可行解和上一题有点像 只是这个要打印所有的可行方案 建图还是类似 因为每个矩形框的四边都有点可见 所以每个矩形框的左上角和右下角的坐标是可以确定的 然后一个矩形框上有其它字符时 就让这个矩形框对应的字符和那个其它字符建立一个小于关系 由
2015-08-20 10:29:13 1090
原创 POJ 2585 Window Pains(拓扑排序·窗口覆盖)
题意 有一个4*4的显示器 有9个程序 每个程序占2*2个格子 他们的位置如图所示 当你运行某个程序时 这个程序就会显示在顶层覆盖其它的程序 给你某个时刻显示器的截图 判断此时电脑是否死机了(出现了不合法的覆盖关系)拓扑排序的应用 关键是建图 当一个程序A的区域上有其它程序B时 说明A是在B之前运行的 那么我们可以建立一个A#include #include #
2015-08-19 16:11:44 1082
原创 POJ 1094 Sorting It All Out(拓扑排序·判断+实现)
题意 由一些不同元素组成的升序序列是可以用若干个小于号将所有的元素按从小到大的顺序 排列起来的序列。例如,排序后的序列为 A, B, C, D,这意味着 A 每来一个小于关系就进行一次拓扑排序 直到出现冲突(也就是出现了环)或者已经能确定顺序 当结果已经确定时 后面的小于关系也就没有必要处理了 因此可以用一个flag标记结果是否已经确定#include #include #i
2015-08-19 14:59:12 2197
原创 HDU 2871 Memory Control(线段树·区间合并·Vector)
题意 模拟内存申请 有n个内存单元 有以下4种操作 Reset 将n个内存单元全部清空 New x 申请一个长度为x的连续内存块 申请成功就输出左端 Free x 将x所在的内存块空间释放 释放成功输出释放的内存始末位置 Get x 输出第x个内存块的起始位置Reset 和 New 都是基本的区间合并知识 比较简单 Free和Get需要知道内层块的
2015-08-16 21:32:22 886
原创 POJ 2991 Crane(线段树·向量旋转)
题意 有一个Crane由n条线段连接组成 每个连接点处均可以任意旋转 给你n条线段的长度 然后又m次旋转操作 给你p和r 将第p和第p+1条线段之间的角度旋转为r 即第p条线段绕p的终点逆时针旋转r度后能够与第p+1条重合 问每次旋转后最后一条线段的终点坐标可以发现 旋转第p+1条线段时 p+1后面的所有线段也一起旋转了 可以把Crane分解为n个向量 这些向量
2015-08-16 15:16:48 957
原创 HDU 3265 Posters(线段树扫描线·矩形框面积并)
题意 把一些矩形海报挖去一部分小矩形贴在指定位置 问最后海报覆盖的面积一个矩形框可以分割成4个独立的小矩形 然后就能用扫描线求面积并了#include #include using namespace std;const int N = 100005, M = N << 2;typedef long long ll;struct SLine{ int x, y1
2015-08-15 17:56:37 856
原创 HDU 1828 Picture(线段树扫描线·周长并)
题意 给你一些矩形的左下和右上的坐标 求这些矩形的周长并也先来看点图 和面积并类似 求周长并也可以对每条竖边从左往右进行扫描 每次周长增加了多少呢 可以发现y方向上对周长增加的量就是扫描线上线段的总长度的改变量 x方向增加了线段段数 * 2 倍的与下一条竖边间的距离 因为每一段都会对应两个横边那么我们需要维护线段的总长度len和线段的段数num len和
2015-08-14 14:04:24 1390
原创 HDU 3634 City Planning (离散化)
题意 给你n个矩形 每个矩形都有自己的value 你可以任意改变矩形的表里关系 被覆盖的地方的value取最表层的 求总value的最大值刚看了扫描线 感觉这个可以用扫描线做就直接写了 其实直接离散化就行了 因为最多也就20个矩形 那坐标最多也就40个 那我们对坐标进行离散化 然后将矩形按value从小到大一个个的放 暴力更新覆盖格子的value 最后直接将2n
2015-08-14 09:32:37 909
原创 HDU 1542 Atlantis(线段树扫描线·面积并)
题意 给你一些矩形的左下和右上的坐标 求这些矩形的面积并最基础的扫描线 理解了就是个水题了 先看一些图吧 恩 看完了有什么感觉没有 那些红色的线就可以当作传说中的扫描线 就像从左到右扫描嘛 可以发现 矩形有竖直边的地方就有这些线 这些线把把拼在一起的矩形切
2015-08-12 21:10:56 1038
原创 HDU 3397 Sequence operation(线段树·成段更新·区间合并·混合操作)
题意 给你一个只有0, 1的数组 有这些操作 0. 将[a, b]区间的所有数都改为0 1. 将[a, b]区间的所有数都改为1 2. 将[a, b]区间的所有数都取反 即与1异或 3. 输出区间[a, b]中1的个数 即所有数的和 4. 输出区间[a, b]中最大连续1的长度对于所有的3, 4操作输出对应的答案单个的操作都很简单 但搞在一起就
2015-08-12 10:12:46 864
原创 HDU 3308 LCIS (线段树·单点更新·区间合并)
题意 给你一个数组 有更新值和查询两种操作 对于每次查询 输出对应区间的最长连续递增子序列的长度基础的线段树区间合并 线段树维护三个值 对应区间的LCIS长度(lcis) 对应区间以左端点为起点的LCIS长度(lle) 对应区间以右端点为终点的LCIS长度(lri) 然后用val存储数组对应位置的值 当val[mid + 1] > val[mid] 的时候就要进行区间合并操
2015-08-11 09:01:24 1231
原创 GCD·我所理解的扩展欧几里得
题意 求不定方程 ax + by + c = 0 满足 x1 的解的个数这里弱先来预习一下扩展欧几里得算法 ( O_O ) 欧几里得算法先来看看欧几里得算法 也就是辗转相除法 gcd(a,b) = gcd(b, a%b);简单的证明令 a%b = r 设 d 是 a, b 的公约数即d|a && d|b又 d'r = a – kb 所以
2015-08-10 15:19:01 1266 1
原创 UVa 11426 GCD - Extreme (II) (欧拉函数应用·O(N*logN))
题意 令 G(n) = sum{gcd(i, j) | 0 给你一个n 输出G(n)令 F(n) = sum{gcd(i, n) | 0 那么有递推式 G(n) = G(n-1) + F(n) , G(0) = 0 也就是说只用求出F(n) 就能递推求出 G(n)了 而求F(n)就比较容易了 对于i 设 x < i , gcd(x,i) = 1即x, n 互质
2015-08-09 17:52:29 1009
原创 LightOJ 1236 - Pairs Forming LCM (LCM·唯一分解)
题意 给你一个数n 求满足lcm(a, b) == n, a 容易知道 n 是a, b的所有素因子取在a, b中较大指数的积先将n分解为素数指数积的形式 n = π(pi^ei) 那么对于每个素因子pi pi在a,b中的指数ai, bi 至少有一个等于pi, 另一个小于等于pi先不考虑a, b的大小 对于每个素因子pi1. 在a中的指数 ai == ei 那么
2015-08-07 09:27:32 2581 4
原创 POJ 1167 (DFS·剪枝·公交时刻表)
题意 你记录了[0, 59]这个时间段内到达你所在站牌的所有公交的到这个站牌的时间 对于每路公交1. 同一路公交的到站时间间隔是相同的2. 每路公交在这个时间段至少到达两次3. 最多有17路公交4. 两个不同路的公交的第一次到站时间和到站时间间隔都可能是相同滴5. 你在这个时间段内的记录是完整的求最少用多少路公交可以让你的记录合法由于每路公交至少到站两次 那么第一
2015-08-03 16:30:48 1802
原创 POJ 3411 Paid Roads(DFS)
题意 你要从第1个城市到第N个城市去 有m条路 每条路用a, b, c, p, r 表示 你从第a个城市到第b个城市时 若之前经过或现在位于第c个城市 过路费就是p元 否则就是r元 求你到达第N个城市最少用多少过路费由于最多只有10个城市 10条路 这个题就变得很简单了 直接暴力dfs就行 可以用状态压缩来存储已经走过了哪些城市 由于最多只有10条路 从某个城市
2015-08-03 16:04:47 814
(HDUACM201303版_15)筛选法及预处理(附菜鸟的23个经典错误)
2014-08-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人