自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 CodeForces-489f

题目意思是给一个m*n的01矩阵,将剩余的n-m行01矩阵填满,并保证最后的n*n的矩阵每一行和每一列都有且仅有两个1,问有多少种填法。 对于每一行,我们都可以从上一行的所有状态中推出当前这一行填01的方法种数。对于填哪两列其实我们并不用关心,只需要记录到当前行由几个列选了0个1和1个1即可。

2017-12-05 16:04:55 276

原创 ZOJ 3224

题意是给定一个区间和一个长度为n的序列a。定义一个数x的对y的要求值为logy(x)向下取整的值。题目中,对于区间的每一个数x,定义x有效为 x 能够整除对于ai的要求值,最后输出有多少这样的x。 虽然区间的范围可能很大,但是序列a划分的区间却只有log个,很容易从这方面想到对区间进行划分。我们再考虑对于每一个数,如果这个数有效,则它必须能够整除对于所有的ai在这个区间的要求值的最小公倍数。拓展到区间,我们可以在O

2017-11-03 08:54:25 527

原创 2017西安集训总结

第二次来西安,收获颇丰。上次来是参加邀请赛,可惜没有好好领略西安的风土人情。这次来西安在一切都安顿好之后,便出去转了转,也是体会到西安的魅力。也去了西安电子科技大学转了转,建筑物都有些历史沧桑感但仍给人一种独特的感受。在这的十四天里最高兴的还是认识了一群和蔼可亲的老师们和同学们。和他们交流的越多,越是佩服他们。这几天学到了很多在平时不会去学的东西,开阔了视野。上课没有死板的教学,所有老师都能积

2017-08-16 19:44:22 418

原创 HDU 6005

题意是给定m条在二维平面上不相交的线段,线段有权值w,这些线段成为一个图,求这个图中的权值和最小简单环。思路思路是错误的,但实际上是水过去了。正确的做法应该是枚举边,然后对 每一个边跑最短路。首先将图每一个连通图处理出来。对于每一个连通图,我们做这个连通图的MST,然后对于这个连通图的每一个非树边,我们将边加入MST中,然后dfs跑出一个环更新最小值。MST错误样例0 0 1

2017-07-12 22:10:33 460

原创 山东省第八届ACM省赛 Problem.H triangle

这题比较难读,给定一个无向图,不包含自环和重复边,我们定义一条边e的exp(e)为包含边e的三元环的个数。另外我们定义一个图E的nice(E)值为nice(E)=min(exp(e),e∈E),对于一个 边e的nice(e)=(max(nice(H)),e∈H and H is subgraph of G).即求所有图中最大的那个图的nice值,而那个图最大的nice值又定义为它的所有边中最小的e

2017-05-10 22:35:21 665 1

原创 URAL 2014

题目大意是一个人出国留学只用信用卡消费,会出现某天有金钱变化,这些都只会有两种情况,一种是挣钱,一种是花钱,如果钱不够就需要用信用卡透支。这些天还会像家里的父亲寄一封信来说明当天支出和收入。但是由于快递不行,所以到达父亲手里的信封的时间是乱序的,问每当收到一封信,父亲能推算的最大透支额度是多少。思路:线段树先把时间离散化,然后对每一封信,用线段树更新当前天到最晚天的收支,最后用线段树维

2017-05-04 00:05:27 346

原创 POJ 3576

题目大意是给定n个字符串,构造一个包含所有字符串的节点数量最少的自动机思路:Trie+Hash很明显我们就是要把所有等价的子树归为同一个节点。很明显用哈希映射子树即可。映射的时候有三个要素,第一个就是每个节点是否为一个字符串的末尾,第二个就是每个节点的深度是否相同,第三个是所有子树的的哈希是否相同。#include #include #include #include

2017-03-17 22:24:49 360

原创 POJ 2217

题目大意是给定两个字符串,求两个字符串的最长公共子串。网上大部分给的都是LCP啊..? 我的第一想法就是二分子串的长度,开始想用哈希搞一搞,后来发现还是还是后缀数组扎实。所以二分子串长度,当找到一个长度可以使一个字符串s1中的子串在字符串s2中出现,长度++,保存答案,否则--然后后缀数组来查询就好了。#include #include #include #include us

2017-03-08 18:00:28 397

原创 2017 Icpc Camp总结

(现在才搬出来似乎时间有点晚了啊ICPC-Camp活动总结   从2月12号正式开始的Camp活动至2月18号正式结束,一共7天的比赛+各种讲座的模式的训练,也算经历了一次难忘又有意义的(被虐)活动了。    首先说一下饮食起居,虽然一个人是3000的训练费,在北京的大酒店里还是过的很惬意的,因为是一个四星级酒店,房间干净舒适。同时Camp委员会也给我们准备

2017-03-06 19:44:26 2438

原创 POJ 1035

从给出的字典中查找是否有符合的单词。如果没有这再次检查多一个字母或者少一个字母或者替换一个字母的单词,并把这些单词 按输入顺序全部输出出来。

2017-01-21 11:54:08 297

原创 POJ 3436

题目大意是ACM比赛的一个电脑有p个零部件的状态,有n个机器组成的生产线,每一个机器可以让电脑的状态改变并用0和1表示。 每个机器能处理Qi个电脑,问怎么安排能让生产线组成最大的工作效率。 思路 网络流 这题其实难点在于构图。不能将状态看成点因为如果机器是边,边只能有一个,开始没想到WA两次。正确的姿势应该是将机器拆成 两个点来限制流量,两个状态分别代表边。枚举机器的边构建图,两个机器之间有路自然是容量无限大。用Dinic跑一遍最大流,最后 图中仍有流量的边即必须构造的边。

2017-01-21 00:47:23 381

原创 POJ 3020

给出一张图形,用‘*’代表城市,每两个相邻的城市之间可以连线,问怎么连线使得连线数量最少且覆盖所有的城市。思路二分图最小路径覆盖最小路径覆盖即在边集中选取尽量少的边使其覆盖所有的点。这里用到一个性质即二分图的最小路径覆盖数 = |V| - 最大匹配数这里要把每一个城市拆点见图,构造两个不同的顶点集,最后套用匈牙利算法#include #include #include #in

2017-01-19 13:03:52 248

原创 HDU1789

题目大意是给定n个任务的截止日期和不完成所扣的分数,每个任务完成需要一天,怎么做问最少扣的分数最小 贪心 首先要安排扣分大的任务,如果先安排分数小的任务,也许就会导致分数大的任务完不成。分数相同的先安排截止日前靠前的。 安排任务尽量从截止日期开始往前安排,如果从前往后安排,可能会使某些可以完成的任务不能完成。

2016-12-18 14:52:52 347

原创 HDU 2845

给定一个n 行 m列的矩阵,每次选取都有一定的规则,每一个小格都有价值,问如何选取价值最大。选取的规则是,选中的当前小格沿y轴方向的左右两个小格不能选择,和它相邻的沿x轴的两行小格不能选择。这题从横向看(y轴方向),每次选中小格后,都是相邻的小格的不能使用,而且选中小格相邻两行也不能使用,我们肯定是把这一行尽量取最优。这样对于每一行,我们都有一个最优,从总体如何选择行来看,也和我们

2016-12-06 15:24:19 375

原创 HDU 1505

这道题实质是HDU1506的二维版dp http://blog.csdn.net/Andymion/article/details/53443988在给定的矩形中选取最大的矩形,其中有些地方是被占据的,不能选取。以行为开始依次寻找,首先预处理当前块能向上延伸的长度,然后一维处理它的长度下左右延伸的宽度。#include #include #include #include #inc

2016-12-04 18:27:23 407

原创 HDU 1506

题意是给定一定量的木板,长度不一,按顺序排成一排,问够成的图形中能容纳的最大的矩形面积是多少。思路dp / 单调栈首先说dp的思路,因为对于每一个木板,我们都有一个高度,主要是看这个高度能够向左向右延伸多远。如果一个木板左边的木板能够大于当前的木板,则当前的木板的高度就能延伸到左边的木板,依次类推,我们其实就是不断寻找左边木板最多能延伸到哪,因为如果左边木板比当前木板的高度大的

2016-12-03 13:29:50 454

原创 UVALive 7147

题目是问从n个球队中选拔m个球队,每个球队都会和其他球队进行一场比赛,比赛会有输赢平三种结果,分别对应不同的得分。不能晋级的最高得分和能晋级的最低得分。是一个有多种情况的贪心+构造问题。首先将所有球队分为3部分m, 1, n - m - 1,同时开头处理保证赢的得分比输的大。假设中间那个人就是不能晋级的最高得分,他和前m个人一样要获得一个基础分,即和被淘汰的队伍总是赢或者总是平

2016-11-22 15:09:02 437

原创 URAL 1269

这个题断断续续写了一星期,借鉴了大神的思路,总算是把这个题A掉了。题意就是在文本中找到第一个字典中的单词,很明显的AC自动机,但是卡内存和卡时间。卡时间的话,网上有的自动机的模板是会超时的。不过大致算法是一样的,只是有个小细节要处理。卡内存,网上大神的题解用了map,简单易懂,我为了最大限度的保存空间,用的结构体指针的形式,对于任意一个节点,它的儿子节点都用map将int映射成一个

2016-11-04 01:22:12 441

原创 HDU 1074

题意是一个刚从赛场回来的ACMer,要补作业,每个作业都有完成的时间和截止期限,超过截止期限要受到惩罚。问怎样安排写作业的次序使得受到的惩罚最小,如果有多个答案,输出字典序最小的。思路状态压缩,dp因为完成作业的状态有很多种,可以完成了这个,再去完成另一个,很容易想到用一个集合表示,即状态压缩。最后记忆化搜索即可。#include using namespace std;

2016-10-26 22:05:42 305

原创 UVA 10723

题目大意是给你两个字符串,求一个最短长度的字符串,使得两个字符串是这个字符串的子序列,同时求出有多少种这样的字符串。思路LCS其实求出最短长度还是很好理解是一个基本的LCS问题。但是求出多少种就要用递推。设p(i, j)是第一个字符串的前i个字符和第二个字符串的前j个字符串求得的最短长度字符串的数量。设d(i, j)是最长公共子序列长度, s, t分别为两个字符串。当s[i

2016-10-18 15:42:31 630

原创 HDU 2955

题目描述是一个汉子准备去抢劫,给定n个银行的存款和风险,求让他在能承受的风险下取得最大利益。思路 01背包如果按照普通01背包的思路来想的话容量应该是风险,价值是利益。但是容量因为是浮点数所以转移并不简单,所以我们可以计算出所有可能获得利益的概率。把容量改为利益,价值是风险,这样便能转移状态。这样就相当于求获得最大利益的最小风险,但是计算最小风险的话用概率的知识就知道,每抢劫一

2016-10-13 23:35:31 218

原创 UVa 1252

有n个物体的m个特征,每个物体用m位的01串表示,每次可以询问一个特征,问最少询问几次可以保证猜到思路状态压缩、动态规划用两维表示,d(s, a),s表示已经询问的特征集,a表示已经具备的特征集,设要询问的下一个特征为kmin{ max{ d(s + {k}, a + {k}), d(s + {k}, a)  + 1} }边界是当有个物体符合a,不符合s-a中的特征,d(s,

2016-10-11 09:39:26 406

原创 UVa 1218

题目大意是给定一个树状结构,确定一些特殊的结点,使每一个普通节点之和一个特殊节点相邻,且求得的这些特殊节点的数量最少其实就是最大独立集的翻版,想到状态也就不难推出状态转移方程了。1、 d(u, 0) = sum { min(d (v, 0), d (v, 1) ) } + 12、 d(u, 1) = sum { d (v, 2) }3、 d(u, 2) = min{ sum { d

2016-10-08 19:57:58 341

原创 UVa 1001

题目大意是给定n个球形的洞,一个起点和一个终点,球体之间可以相交,球体内部是瞬间移动,其余的是一个单位要10sec时间移动,问最短需要多少时间思路floyd我们把每个球体抽象成一个点,若两个球体相交,则距离是0,若不相交,则两个点之间的距离就是圆心之间的距离减去两个球体的半径然后把起点和终点当成两个没有半径的球体,最后用floyd求最短路即可。最后算出最短时间。#inclu

2016-09-25 21:41:47 359

原创 UVa1331

题目大意就是对一个多边形进行三角剖分。wiki的三角剖分https://en.wikipedia.org/wiki/Triangulation_(geometry)问怎么剖分使得最大三角形的面积最小。对于凸多边形,都有状态转移方程d(i, j) = Min{d(i, k), d(k,j), S(i, j, k)}但是题目中给的不一定是凸多边形,则在对任意一个子多边形,如果有任意

2016-09-25 16:28:49 648

原创 UVa 1630

题目大意是给你一个字符串,字符串可以折叠,S串折叠后可以用X(‘S)表示,其中’S是S的子串,问折叠后最小的长度串是什么。数字X和括号也算长度。思路DP这题很容易想到是记忆化搜索,要注意两点,一个是折叠串的判断,可以通过枚举位置来实现,可以判断一个子串可以是当前串的多少分之一,第二个是分区间讨论,用一个数组保存折叠次数方便打印。状态转移方程是如果S(i, j)是折叠串 

2016-09-23 18:42:47 516

原创 UVALive 6590

题目大意是用26个字母作顶点,开始构建一个给定图的补图,用图描绘一个矩阵。思路判环,暴力首先判断是否有环,如果有则一定可以构建一个20*20的矩阵,否则暴力搜索一个最长路径,使得矩阵的边长为(路径长度 + 1)/ 2#include using namespace std;const int maxn = 100 + 5;int g[maxn][maxn], res;vecto

2016-09-23 15:04:37 932

原创 UVa 1629

题目大意是给定一个n * m的蛋糕,蛋糕上可能会有樱桃,每次只能沿轴线切一刀,求最少的能使每一块蛋糕至少只有一个樱桃的最小长度。思路记忆化搜索问题本身不难,状态就是给定每块蛋糕的左上角和右下角,然后记忆化搜索即可,同时注意切蛋糕一定要保证每一刀分开的两个蛋糕都至少有一个樱桃。#include using namespace std;const int maxn = 20

2016-09-19 23:49:54 337

原创 UVa 1626

题目大意是给定一个括号序列,添加最少的括号使这个序列匹配并且打印出来思路区间DP首先设计状态,d(i, j)表示当前序列的开头位置是i,结束位置是j的最短需要添加的括号的个数,对于当前的括号序列,如果最左面的括号和最右面的括号匹配,则它的最小值应为d(i, j) = min{d(i, j), d(i + 1, j - 1)}, 同时取d(i, j) = min{d(i, j), m

2016-09-17 11:00:18 274

原创 UVa 1625

题目大意输入两个序列,将两个序列合并成一个序列,要求原有的顺序不能改变。思路dp首先要想到如果按题目要求合并序列可以每次把一个序列的开头放在合成序列的尾部,此时可以设计状态d(i,j) 表示当前第一个序列到了第i个位置,第二个序列到了第j个位置的最小花费,最后的结果就是d(n,m) ,n是第一个序列的长度,m是第二个序列的长度。状态转移方程为d(i+1, j) = min{d(

2016-09-07 09:07:12 296

原创 UVa 10118

题目大意是给了4堆糖果,每一堆糖果里面都有各种各样的糖果,我们每次可以取每一堆糖果顶端的糖果放在篮子里,篮子里最多放不超过5种糖果,如果篮子里有一对一样的糖果,就把那一对糖果放在口袋里,问口袋最多能放几个糖果思路      记忆化搜索既然只有4堆糖果,我们每次取法总会重复计算一些状态,将状态记忆化, d(a, b, c, d){1 到了第a个,第二堆糖果到了第b

2016-09-06 13:41:13 333

原创 UVa 12219

题意大体是给定一个字符串,根据字符串建树,然后可以把树化简成一个图,最后根据图输出一行字符串思路      映射题目就是要求化简子树,使每一个子树都唯一存在,可以用一个三元组SubTree(root, l, r)代表整个子树,root是当前子树根的字符串,l是当前子树的左子树,r是当前子树的右子树,每次用map查询可以实现O(logn)的查询,建树的时候直接从左到右

2016-09-05 22:06:07 485

原创 URAL 2067

题目大意是给定几个孩子的s值和r值,两个孩子之间的友情值是(sqrt((si - sj)^2 + (ri - rj)^2)) 1 三个孩子的友情值是每两个孩子的友情值的总和再除以2,最好的朋友是对于任意两人u, v的友情值都有p(u, v) >= p(u, v, w)w是第三个人思路构造从友情值的计算可以看出两个孩子的友情值是平面坐标系上亮点之间的欧几里得距离,我们把式

2016-08-22 23:12:42 286

原创 UVA 1608 Non-boring sequence

题目大意就是判断一个序列中,对于任意子序列是否存在重复元素,如果是则序列是无聊的,否则是不无聊的。思路      分治,中途相遇法紫书上的思路已经很清晰了,首先是找到一个当前序列中不重复的元素,递归判断被它分隔的左序列和右序列是否满足题意。直到找到只有一个元素的序列为止。如果在扫描一个序列是从左到右扫描,最坏情况是在另一端,则 时间复杂度是O(n^2) 如果用中

2016-08-22 12:40:19 324

原创 UVa 10652 Board Wrapping

题意是给定一些矩形,用一条线包围所有的矩形,同时要求包围的面积最小。思路凸包实质就是自己算出所有矩形的四个顶点,求凸包,然后求面积即可。#include #include #include #include #include #include #include using namespace std;const double eps = 1e-10;const

2016-08-20 00:30:06 334

原创 UVALive 6859

题目大意是给定一些点,在坐标网格上,用另外的点围成一个多边形包围这些点,并使多边形的周长尽量小,同时注意边的斜率只能是90度或者45度思路      凸包为了保证周长尽量小,我们选用的点就是和给定的点的相邻点,用Graham扫描法扫描这些点,可以求出一个大体的凸包最后处理这些边的长度时,如果是90度或者45度直接加和,否则则对这个边进行分解,再加和。#include #inclu

2016-08-17 21:44:56 536

原创 HDU 3667 Transportation

题目大意是从1节点到n节点运送物品,给定m条边的起点和终点,容量和费用,求把这些东西送到终点的最小费用是多少,如果不能全部送达则输出-1思路       网络流这题可以用SPFA的最小费用最大流模板来处理,唯一的难点就在于见图,从一个顶点u 到 v 的费用为 当前的流量值的平方 * ai ai为开始给定的每个道路的费用。由于我们要算的是流量的平方,可以构建一个等差数列1,3,5

2016-08-16 21:52:54 402 2

原创 CodeForces 589B

题目大意是给定n个蛋糕的长和宽(可以互换),可以对蛋糕进行切割,最后选定一些蛋糕,这些蛋糕的长和宽都相同,求最大的体积(为长和宽乘以个/层数)。思路       枚举,构造输入n个蛋糕,确保每一个蛋糕的长一定大于宽,原因是互换肯定能保证最优解也在互换之后的蛋糕里,然后根据长(也可以是宽)排序。每次拿出一个蛋糕,将所有长大于等于该蛋糕的长的蛋糕的宽拿出来。对这些宽进行排序,这样就保证

2016-08-14 20:14:25 398

原创 HDU 4433

题目大意是给定一个密码锁的初始状态和最终状态,每次可以转动连续的一或二或三个状态,问到最终状态最少需要转几次。思路      DP设d(i, x, y) 为 前i个字符已经匹配好,第i + 1的数字是x, 第i + 2的数字是y。则状态转移方程为d(i, y + a, z + b) = min{d(i, y + a, z + b), d(i - 1, x, y) + step}

2016-08-14 11:46:39 489

原创 HDU 5510

题目大意是给定n个字符串,对于任意一个字符串i (1     不是i的字串,不是则输出-1    思路           kmp    如果直接用kmp进行暴力显然也会超时,我们可以动态维护一个最大值r,对于每一个字符串 i 如果字符串 i 是字符串 j 的子串,则    直接扫描下一个字符串,否则则更新r,对于每一个字符串 i 要扫描的 j 我们直接

2016-08-14 11:10:47 828

空空如也

空空如也

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

TA关注的人

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