自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 poj 2185 next数组应用(用最小矩形铺砖)

题意:在字符矩阵中找出一个最小子矩阵,使其多次复制所得的矩阵包含原矩阵。思路:(http://blog.sina.com.cn/s/blog_69c3f0410100tyjl.html)看的别人的题解。第一步也是找最小重复子矩阵的宽,网上的大部分代码就卡在这里,如实例(poj讨论数据):实例1:2 8ABCDEFABAAAABAAA实例2:2 8ABCDEFAB

2015-04-30 11:50:17 412

原创 poj 3080(3450) KMP(暴力也能过) 多个串的最长公共子串

题意:给定m(m思路:暴力找出第一个串的所有长度大于等于3的子串,用KMP算法求其是否为剩下m-1个串的子串。为了复用next数组,枚举子串时先固定起点(求一遍next数组即可),然后由长到短枚举子串(剪枝)。#include #include using namespace std;#define N 60char s[12][N+5],t[N+5],res[N+5];int

2015-04-27 21:24:21 359

原创 2015微软编程之美挑战赛初赛第2场

2015微软编程之美挑战赛初赛第2场

2015-04-26 14:42:34 1094 3

原创 poj 2752 KMP的next数组应用(prefix-suffix string)

题意:给定一个串,求其所有的同为前缀和后缀的子串的长度。思路:用KMP预处理的next数组就可以解决,时间为O(n)。可以这样想,符合题意的最长的串必为原串,次长度为next[len-1],这是由next数组的定义决定的。再次长度就是对str[0,next[len-1]]这个串去求,也就是next[next[len-1]]这么长。所以递归求下去就可以了。#include #include

2015-04-26 10:32:24 474

原创 poj 3461 KMP(模式匹配模板)

题意:经典模式匹配问题。思路:KMP(Knuth-Morris-Pratt)算法。采用的算法导论里的伪代码模板。#include #include char s[10005],t[1000005];int T,next[10005],lens,lent;void getnext(){ int i,k; next[0] = k = -1; for(i = 1;

2015-04-26 10:04:54 406

原创 2015微软编程之美挑战赛初赛第1场

#include #include #include using namespace std;#define N 1005int n,c,T;int s[N];int first[N<<1],top,used[N],link[N];struct edge{ int y,next;}e[N*N/2];int isprime(int x){ int i; if

2015-04-25 14:41:23 501

原创 poj 1122 最短路+路径追踪(消防路径)

题意:在一个n顶点图上,找出从消防站到着火点的最短时间与最短时间中所走的点。路的长度由一个n×n的矩阵给出,矩阵中的第(i,j)个元素代表从i到j的时间,-1代表不能到达。最后一行,第一个数代表着火点;后面多个数代表消防站。输出的是消防站 着火点 时间 路径,按照时间从小到大排序输出(如果有相同的则任意输出,如果有不同的路径也是任意输出)。思路:非常显然的最短路,不过是多源点单汇点,这个可以通

2015-04-25 10:00:50 777 1

原创 将多个PDF合成一个的方法

最简单的方法:在PDF文件里选择文档->插入页面,进入要选择插入的文件,选定后,选择拟插入文件的位置,最后确定即可,可以通过拖动来交换顺序。非常方便。其他的还有一些软件工具可以达到这个效果。

2015-04-24 11:49:09 729

原创 poj 1752 差分约束(沿路建广告)

题意:有n个人在一条路上跑步,假设这条路上每一个点有一个广告牌,广告商准备在广告牌上贴广告。现在已知这n个人从ai开始跑,到bi结束,现在广告商需要每个人都至少要看到k个广告(对于跑步全程都小于k的人来说,需要他经过的每个广告牌上都有广告)。问满足条件的总的广告数和哪些广告牌上应该张贴广告。思路:差分约束。Xi表示用起始点到Xi总共需要张贴的广告数量。那么对于第i个人,X(bi+1)-X(ai

2015-04-24 09:01:39 589

原创 poj 2505 博弈(乘以[2,9])

题意:给定一个数k,A和B两个人来博弈。从1A先开始,每次的动作是乘以[2,9]之间的一个整数,谁先把这个数乘到大于给定的k就算赢,问谁有必胜策略。思路:博弈题最难描述清楚,一开始找规律,然后总结规律中的必然。(http://www.cnblogs.com/rainydays/archive/2011/09/07/2169471.html)能到达必败态的状态为必胜态,只能到达必胜态的状态为必败

2015-04-23 20:54:20 526

转载 matlab mac 中文乱码的问题

转载:http://my.oschina.net/u/1051634/blog/208025matlab在mac下使用编辑器显示中文全是乱码,自己很多资料的注释都是中文使用时看不明白什么意思,很不方便。      打开matlab的安装目录(右键点matlab图标选择 show package contents(显示程序包内容))      就进入matlab的

2015-04-22 17:25:53 3124

原创 poj 1161 暴搜(权值都为1的最短路,开会选址)

题意:给出n个点和l个区域(这些区域就是图中的面)。输入前三行为r,n,l,分别表示区域数、点数、和俱乐部数。第四行有l个数,分别标记哪些个点是俱乐部。接下来2*r行,代表r个区域,每个区域由两行表示,第一行为区域由num个点围成的,第二行num个数代表是哪些点围成这个区域,这些点按顺时针(最后一个表示最外区域时是逆时针)围成这个区域,相邻两点代表一条边。问,在图中找出一个区域,使得所有俱乐部点到

2015-04-21 17:04:40 681

原创 poj 3177 割边(双连通分量)

题意:求最少添加多少条边可变无桥的连通图。思路:求出所有的双连通分量(块),然后进行缩点。所求为缩点后的图的叶子数量加1,再除以2。要点:属于同一双连通分支的点的low值必相同。求双连通分量时可以不用dfn数组。注意:题目中有重边,可以用邻接矩阵判断一下重;存在临界表时判断一下也不会超时。#include #include #include using namespace std

2015-04-20 21:56:15 315

原创 编程之美2015资格赛

编程之美2015资格赛1:判断闰年:#include #include using namespace std;int T,c;char month[13][15] = {" ","January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "Novem

2015-04-17 10:30:17 328

原创 poj 2983 spfa差分约束

题意:给出两种关于防御站位置的信息,一种是确切的信息,P A B X,表示A在B北面X距离的地方,另一种是V A B,表示只知道A在B的北面,且距离至少为1。问这些信息有没有矛盾。思路:明显的差分约束。对于P A B X,列出X注意队列的大小~~#include #include #include #define N 1005#define M 100005#define I

2015-04-16 17:45:40 325

原创 poj 1904 tarjan强连通分量(给国王的2000个儿子找老婆 )

题意:有n个王子,每个王子i有ki个他喜欢的妹子,每个王子只能和喜欢的妹子结婚,大臣给出一个匹配表(假设肯定是对的),每个王子都和一个妹子结婚,但是国王不满意,他要求大臣给他另一个表,每个王子可以和几个妹子结婚,按序号升序输出妹子的编号,这个表应满足所有的王子最终都有妹子和他结婚。思路:一开始自己想了一会儿只能想到是反复找匹配,连大臣给的初始匹配有什么用都不知道。后来看了题解(http://w

2015-04-15 21:03:17 601

原创 poj 3013 spfa(圣诞树)

题意:给n个点从1到n标号,下面一行是每个点的权,另外给出m条边,下面是每条边的信息,两个端点+权值,边是无向边。你的任务是选出一些边,使这个图变成一棵树,使得这棵树的花费最小。这棵树的花费是这样算的,1号固定为树根,树中每个双亲节点下面的边都有个单价(即边权),然后单价乘上这条边的下面所有的子孙后代的点权和。思路:通过写出求和式子可以发现求的其实是对每个点的权值乘以从节点1到这个点的最短路的

2015-04-15 16:00:48 509

原创 MAC下的UML画图工具

在windows下画复杂些的流程图都用的微软的VISIO软件,但是这个软件没有MAC版的。经过几番搜索,http://developer.51cto.com/art/201006/208044.htm上提供了几个软件。第一个StarUML用起来还可以,一些简单的功能都能够具备。用的过程中出现了一个问题,就是导出为PDF之后都是乱码;为了解决,我先把它到成为图片,再转化为PDF。经过试验,导

2015-04-15 12:49:08 7304

原创 poj 1608 dp(Banal Ticket)

题意:给定一个长度为2n的串,每个字符或者是数字,或者是?。?的位置也应该是一个字符表示相应的数字,但是看不清了。问把?还原成数字,使得前n个数字的乘积等于后n个数字的乘积的还原方法有多少种,不等于的又有多少种?输入:2 2??3输出:4 96 样例解释:两个问号填数字能符合的四种是:2003、2323、2643、2963。思路:做过的最难的一道dp,同学讲给我

2015-04-14 14:15:03 933 1

原创 poj 3740 DLX(精确覆盖)

题意:经典的精确覆盖问题。思路:精确覆盖问题是NPC的,用DLX能够比较有效的搜索。写完两个数独再写这个就不难了(实际上这个是原始问题,数独只是DLX的应用)。#include #include #define N 16#define M 300struct node{ int l,r,u,d,x,y;}p[N*M+M+5];int s[N+5][M+5];int n

2015-04-14 10:15:45 534

原创 poj 3074/3076 数独(Dancing Links)

题意:经典的数独游戏,不过此题的范围更大,是16*16的方阵。思路:Knuth大神提出的Dancing Links(DLX),具体可以参见他的论文。而对于Dancing Links的数据结构讲述的比较好的有(http://www.cnblogs.com/grenet/p/3145800.html,这篇论文的图画的非常仔细),而代码写的比较清晰的是(http://www.cnblogs.com/

2015-04-12 22:44:31 422

原创 poj 2677 dp(双调巡游)

题意:双调巡游(bitonic tours)旅行商问题(算法导论中文第三版15-3题)思路:dp。对巡游线路的两个部分分别维护可能的最优解。dp[i][j]代表走的快的人到达j,走的慢的人到达i时的最小距离。怎么得到dp[i][j]呢,这要分情况。如果i#include #include #include #include using namespace std;#def

2015-04-11 14:07:14 1074 1

原创 poj 3469 最大流dinic(双核CPU)

题意:有一台双核电脑,给多个任务,每个任务可以在两个核之一运行。分别给出每个任务在第一个核和第二个核上运行的消耗。后面的m行输入是给出两个任务在两个不同核上运行需要付出的额外消耗。问将所有任务做完所需要的最小耗费。思路:把每个任务作为节点,在超级源点与任务间的连一条边,其容量为给任务在核1上运行的消耗,在该任务节点与超级汇点之间连一条边,容量为该任务在核2上运行的消耗。在任务之间连接无向边

2015-04-10 15:08:00 386

原创 poj 3735/3070 矩阵快速幂(牛吃花生)

题意:有n只猫咪,开始时每只猫咪有花生0颗,现有一组操作,由下面三个中的k个操作组成:1. g i 给i只猫咪一颗花生米2. e i 让第i只猫咪吃掉它拥有的所有花生米3. s i j 将猫咪i与猫咪j的拥有的花生米交换现将上述一组操作做m次后,问每只猫咪有多少颗花生。思路:将每一组操作用矩阵A描述,然后就是矩阵快速幂了。对于样例构造的矩阵见代码后注释。最后一列用来表示操作g,

2015-04-09 12:59:06 378

原创 poj 2104 划分树(查询区间第k大数)

题意:给定一个n个数的数组,有m个查询,每个查询为[a,b,k],意思是区间[a,b]的第k大数。思路:由这个题认识了什么叫做划分树。划分树的基本思想就是对于某个区间,把它划分成两个子区间,左边区间的数小于右边区间的数。查找的时候通过记录进入左子树的数的个数,确定下一个查找区间,最后范围缩小到1,就找到了。建树的过程比较简单,对于区间[l,r],首先通过对原数组的排序找到这个区间的中位数a

2015-04-09 10:27:57 669

原创 poj 3363 模拟(全0矩阵转换成特定的01矩阵)

题意:给定一个01矩阵,要求从0矩阵变换得到该结果,变换的方法是把一个绝对r*c大小的方格内的元素改变(0变1,1变0)。最少多少步。思路:实际上这个步数是确定的,而且数据范围比较小,长宽不到100,所以简单模拟即可。#include #include #define N 105char s[N][N];int t[N][N];int n,m,a,b;void change(i

2015-04-08 00:02:59 796

原创 poj 2275 模拟(翻转汉诺塔)

题意:给定1~n的一个排列,能做的动作是逆转第1~第m个数,给出一种方案使数列变成1~n。思路:简单模拟,之所以简单是因为不是求最少的操作数,而是给出一种方案即可。可是我还是贡献了wa,因为理解错了题意。题目中Flip是指逆转第1~第m的序列,而我理解成了交换第1和第m个数,ORZ。每次将最大的不在最终位置的数移动回去即可~#include #include using namespa

2015-04-07 19:44:51 421

原创 poj 1505 dp(数列分段,最大段和最小)

题意:给出一个有n个数的数列,要求把这n个数分成m段,不能改变原数列的顺序。每段至少一个数。求使得加和最大的那段的和最小的划分方案。如果有多组解的话先要保证第一段和尽量小,若仍有多组解,要先保证第二段和尽量小,以此类推。思路:dp。dp[i][j]表示将前j个数分成i段的段和最大的最小值。一开始dp过程中记录路径然后输出,结果wa。分析原因在于输出不符合题意,比如数据:5 31 1 1

2015-04-07 16:45:01 1236

原创 poj 1239 dp(拆分成Increasing Sequences )

题意:给定一个长度不大于80的数字串,要求对数字串用逗号隔开,使得每个子串表示的数字保证是严格单调递增,且保证分隔后,最后的那个数字最小。当多种情况的最后一个串表示的数相同时,取分隔后的第一个数字最大的,要是第一个数字也相同,那么看分隔后的第二个数字,如此下去,数字前面可以出现0,即000001表示1。思路:从前往后一个dp求出最后一个数字最小时是多少,这个dp比较好理解,dp[i]表示str

2015-04-06 17:22:38 454

原创 poj 1190 dfs+剪枝(生日蛋糕)

题意:中文题。要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体。 设从下往上数第i(1 Ri+1且Hi > Hi+1。 由于要在蛋糕上抹奶油,为尽可能节约经费,我们希望蛋糕外表面(最下一层的下底面除外)的面积Q最小。 令Q = Sπ 请编程对给出的N和M,找出蛋糕的制作方案(适当的Ri和Hi的值),使S最小。 (除Q外,以上所有数据皆为正整数)思路:主要第三个剪枝比较难想:设剩余总体积

2015-04-06 12:01:01 561

原创 poj 1980 dfs+剪枝(Unit Fraction Partition)

题意:给定一个分数,问用分子为1的分数加和来构成这个分数有多少种方式。要求每种情况分数的个数不超过n,分母乘积不超过a。思路:搜索。一开始做犯了一个错误导致一直TLE,就是把当前分数和的分子和分母存为全局变量,导致每次dfs之后还要把当前加上的分数剪掉,浪费了太多时间。具体细节见注释!#include #include #define min(a,b) ((a)<(b)?(a):(b)

2015-04-05 23:43:29 603

原创 poj 2420/1379 随机/模拟退火(求费马点/最偏离点)

题意:给出平面中一些点,求平面中的一个点,使得这个点到其他所有点的距离之和最短(这个点叫作费马点),并输出这个距离和。思路:先随机取个点,再取一个步长,朝4个方向走。如果新位置到各点距离比原来小,就走过去;直到当前位置比四周都好,此时缩小步长。如此迭代,直到步长小于题目的精度(这道题是0.1)输出即可。实际上缩小步长蕴含了模拟退火的思想。不过模拟退火中还可以按照一定概率留在原地(即使移动可以获

2015-04-05 01:20:57 935

原创 poj 2454 随机化(划片使得选举胜利)

题意:给出3*k个数,每个数的范围为[0,1000]。要求将其分为3个长度为k的序列,使得至少有两个序列的和大于500*k。思路:第一步的贪心比较好想,从大到小排序后后k个数舍弃不考虑。接下来的题意和双机调度(和poj2576题意也比较相近,不过那道题背包能过)有点像,就是让2k个数分成两份,每份k个数,使两组数之和尽可能相近。当然首先想用背包去做,但是一直WA(为啥不是tle呢??),于是看

2015-04-04 23:24:40 525

原创 poj 2376 贪心(覆盖区间)

题意:给定n个区间(一个起点a一个终点b)和一个数m。问最少从n个区间中选出多少个区间才能覆盖[1,m],即整个区间。思路:贪心。每一个区间 j 都选取与上一个区间 i 之间没有空隙(即j.a 期间wa了两次,第一次是因为j.a 第二次是上来选取的第一段区间直接用了s[0],实际上包括区间1而终点最长度不一定是第一个。#include #include using namesp

2015-04-03 09:57:17 508

空空如也

空空如也

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

TA关注的人

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