自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

AC_Arthur的专栏

Always challenge miracles!

  • 博客(11)
  • 收藏
  • 关注

原创 UVA live 3938 - "Ray, Pass me the dishes!"(线段树)

题目链接:点击打开链接该题需要深刻理解线段树的特点:任意一个父结点所表示的区间都是两个儿子区间的并, 且儿子区间的交为空集。那么我们可以采用分治的思想: 一段区间的最大连续和要么来自左半边, 要么来自右半边, 或者一半在左一半在右。细节参见代码:#include#include#include#include#include#include#include#inclu

2016-08-27 18:23:27 700

原创 SGU 507 Treediff(平衡树)

题目链接:点击打开链接思路:我们要求叶子结点的值相差最小, 那么这是一个大小关系, 我们可以维护一棵平衡树, 这样, 对于每一个数, 和他相差最小的情况只能是他相邻左边或右边。但是如果开n棵平衡树, 复杂度高达n^2logn,还不如n^2暴力来的快。  我们可以采用一种叫做: 启发式合并  的技巧。 每次将一棵比较小的树合并到一棵比较大的树上。 使得复杂度达到nlogn, 证明也很简单:考

2016-08-23 21:09:28 945

原创 UVAlive 6697 - Homework Evaluation(DP)

题目链接:点击打开链接思路:用d[i][j][last][p]表示第一个串到了i位置, 第二个串到了j位置,上一个操作是last操作, 是否开始匹配的最优解。该题有坑的, 比赛时多亏队友的提示:  当第一个串匹配完毕, 第二个串剩下的部分要当作减去了。细节参见代码:#include #include #include #include #include #includ

2016-08-23 20:54:33 633

原创 HDU 5855 Less Time, More profit(最大权闭合子图)

题目链接:点击打开链接思路:最大权闭合子图的裸题,  给个学习资料:点击打开链接当结点即有正权值又有负数权值时, 怎么求任意闭合子图的最大和呢?  只要求出最小割E, 用总的正数权值TOT 减去E就是答案。细节参见代码:#include#include#include#include#include#include#include#include#include

2016-08-17 21:06:00 864

原创 HDU 5828 Rikka with Sequence(线段树)

题目链接:点击打开链接思路:对于该题, 由于存在区间加一个值, 那么所有数都可能永远不会变成1, 但是数与数之间的相对值会趋近于相等。  比如1 2 3 4 5, 进行一次根号操作变成1 1 1 2 2, 而一旦如果相等, 那么他们同时加一个数也是相等的。  所以我们增加一个标记bit[rt]表示该区间内的数是否全部相等,如果相等等于什么。细节参见代码:#include #inc

2016-08-11 20:39:37 1092 4

原创 Ural 1028. Stars(树状数组)

题目链接:点击打开链接思路:为了满足第一个条件, 我们可以先按照x坐标排序,  然后我们用树状数组来维护y坐标大小关系, 就可以在O(nlogn)的时间内求出答案了。细节参见代码:#include #include #include #include #include #include #include #include #include #include #i

2016-08-10 20:43:13 869

原创 HDU 5818 Joint Stacks(左偏树)

题目链接:点击打开链接思路:该题的关键是怎么把两个栈合并, 我们可以使用一种叫左偏树的数据结构, 满足堆的性质和集合的性质,支持在O(logn)的复杂度下进行删除堆顶元素, 插入一个元素,合并两个堆。细节参见代码:#include using namespace std;typedef pair P;const int maxn = 152400;P v[maxn];in

2016-08-10 19:57:23 942 2

原创 HDU 4455 Substrings(DP)

题目链接:点击打开链接思路:我们用d[i]表示长度为i的答案。   那么我们可以把样例数据写出来看看是否能够递推。   可以发现, d[i] = d[i-1] - last[i-1] + (n-i+1) - dist[i]。last[i]表示从后往前i长度时不同数字的个数, 也就是说, d[i-1]的最后一个子序列被扔了, 然后d[i]比d[i-1]还可能多加了( n - i + 1)

2016-08-08 20:24:20 659

原创 HDU 3237 Help Bubu(DP)

题目链接:点击打开链接思路:比赛时查一点出, 需要加一个优化才能防止超时(恶心), 状态很容易想到: d[i][j][s][k]表示前i本书拿了j本没拿的书的集合是s没拿的书的最后一本是k的最优解。为什么状态压缩的是目前桌子上的书的集合呢?  因为我们要防止一种情况:那就是如果对于高度为H的一种书, 我们都拿走了, 那么还要放回桌子上, 最优解要+1, 这样表示之后, 我们只要判断一下

2016-08-05 21:59:52 872

原创 HDU 3689 Infinite monkey theorem(KMP + DP)

题目链接:点击打开链接思路:用d[i][j]表示前i个字符,已经匹配了字母中的j个字符,最终包含这个字母的概率。每次转移的时候有n个方向, 表示第i个字符选哪个字符, 那么有个问题, 如果我当前选的这个字符失配了, 那么转移之后我还匹配了多少个字符。 这恰恰是KMP能做的。细节参见代码:#include #include #include #include #inclu

2016-08-03 20:02:09 646

原创 HDU 5787 K-wolf Number(数位DP)

题目链接:点击打开链接思路:我们用dp[cur][a][b][c][d][p]表示当前到了第cur位,前四位分别是abcd并且当前是否已经小于给定的数的方案数。  我们分别算出L和R的dp值,  以及L是否符合要求, 做差并把多减的加上即可。  比赛时写的比较恶心, 不是很美观但是很直观。细节参见代码:#include #include #include #include

2016-08-02 20:41:42 1492

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除