- 博客(9)
- 资源 (1)
- 收藏
- 关注
原创 POJ1275 Cashier Employment
题意:给定一个公司24小时每个小时需要的员工数量ri,有n(0 分析:这是一道差分约束的题,我们用f(i)来表示前i个小时任用的总员工数量,不难得出f(i) - f(i-1) >= 0,然后我们用t(i)来表示所有人中从i时刻开始工作的员工的数量,则不难得出第二个不等式f(i) - f(i-1) = -t(i).考虑每个小时的需求,
2016-03-30 23:42:31 658 2
原创 BZOJ1932 [Shoi2007]Setstack 集合堆栈机
题意:模拟一个集合堆栈机,初始化为空,有5种指令:PUSH:把一个空集压入栈。DUP:复制栈顶,入栈。UNION:取出栈顶前两个,把它们的并集入栈。INTERSECT:取出栈顶前两个,把它们的交集入栈。ADD:取栈顶为S,再取栈顶为T,把T∪{S}入栈。一共n(0 时间限制:1000ms总通过时间:1336ms分析:首先整个题目就是一个栈,我们先开个栈,之后我们
2016-03-26 16:35:16 844 2
原创 [CTSC2007] 数据备份Backup
题意:给定n(2 时间限制:10000ms通过时间:568ms分析:我看到这题第一反应是dp,设f(i, j)表示前i个点,选j对,距离之和的最小值。不难列出状态转移方程:f(i, j) = min(f(i-1, j), f(i-2, j-1) + a[i] - a[i-1]).这样时空复杂度都是O(nk),空间开不下,观察到j只依赖j-1,所以可以滚动数组,提交后不幸发现
2016-03-24 21:30:40 1196 2
原创 [NOIp2013] 货车运输
题目大意:给一个n(0 分析:因为要求所有路径上最小边的最大值,所以先求一遍最大生成树,通过最大生成树的边求得的路径一定是最大的,求的过程中用邻接表建图,之后对于每个询问x, y,用st-lca求x, y的最近公共祖先(LCA),求的过程中对经过的路程取min.那么,这里介绍一下st-lca算法:用dep[i]表示结点i的深度,f[i][j]表示结点i的2^j祖先,minv[i
2016-03-21 21:10:05 1199 2
原创 51NOD1515 明辨是非
题意:给n组操作,每组操作形式为x y p。当p为1时,如果第x变量和第y个变量可以相等,则输出YES,并限制他们相等;否则输出NO,并忽略此次操作。当p为0时,如果第x变量和第y个变量可以不相等,则输出YES,并限制他们不相等 ;否则输出NO,并忽略此次操作。n 时间限制:1000ms最长通过时间:765ms感谢zrt神犇的指点。分析:并查
2016-03-16 23:53:31 1240 1
原创 POJ1182 食物链
题意:给出k个关于同类和捕食的关系,判断有几句话是假话。假话满足以下3条之一:1.与前面真话矛盾。2.给的两个类比n大。3.同类吃同类。分析:并查集。可以使用偏移量维护并查集,这里使用另一种方法,把f数组开大成3倍,每个动物有三个元素i, i+n, i+n*2,如果x和y是同类,合并x, y和x+n, y+n和x+n*2, y+n*2,如果x吃y,合并x, y+n和x+n,
2016-03-16 19:49:17 389 2
原创 POJ3468 A Simple Problem with Integers
题目大意:线段树区间加减,区间求和。时间限制:5000ms进行了位运算和输入优化,用时1469ms分析:build函数是建树,边界时把数据输到add数组里,add数组也就是常说的lazy标记,再把add的值赋给sum,建树完毕。用sum[o]表示“如果只执行结点o及其子孙结点中的add操作,结点o对应区间中的所有数之和”,这样可以方便维护。在执行update操作时,递归
2016-03-14 21:17:00 649 1
原创 UVA1152 4 Values whose Sum is 0
题目大意:给定4个n(1 时间限制:9000ms分析:最容易想到的是四重循环枚举a, b, c, d,看看加起来是否是0,时间复杂度O(n^4),超时。这时我们采用一种叫做“中途相遇法”的算法,先枚举a, b,把所有a+b的值记录下来,然后枚举c, d,查一查-c-d有多少种方法写成a+b的形式,总时间复杂度O(n^2logn)那么,问题就是如何记录呢?不难想到STL里有个东西
2016-03-13 19:19:14 739 1
原创 POJ2676 Sudoku
第一篇博客送给数独吧~题目大意就是填数独(如同废话)没有进行搜索顺序剪枝,532ms过的...分析:用二进制来存储可以填的数,用a[i]表示i行可以填的数,b[i]表示i列可以填的数,c[i][j]表示第i行j列的九宫格可以填的数。当准备填一个数的时候,把它所在的行、列、九宫格做“与”运算,用lowbit()得到它能填的所有数。接下来就是每次递归失败后把a, b, c和num数
2016-03-13 12:15:03 505 2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人