- 博客(87)
- 资源 (1)
- 收藏
- 关注
原创 uva 10599 - Robots(II) -动态规划
//// main.cpp// uva 10599 - Robots(II) --动态规划/*此题的状态转移方程好想,很简单。 d[i][j] = max(d[i+1][j] ,d[i][j+1]) + g[i][j] ; 另外 求其中的一条路径也好写。 对于方案数,这是难点啊。MD,原来 即使行代码就解决的,价格方案数。。。。。 这里方案数,要注意的是注意重复,不能根据上
2015-10-25 21:58:13 474 1
原创 hdu 2577 How to Type--记忆化搜索
题目意思不难理解。注意点就是 caslock开启后 安shift+字母键可写出小写。这里主要就是 在何时开启caslock键和关闭caslock键。所以我们设 d[i][caslock]表示 caslock键在第i个字符时的状态是caslock(未开启为0,开启为1)时,打完后序字符所需要的按键次数。则根据当前是否是 小写字母 和打完之后是否关闭caslock键来决定状态的转移。转
2015-10-22 20:57:23 393
原创 uva 1336 - Fixing the Great Wall
//// main.cpp// uva 1336 - Fixing the Great Wall/* 我们先按位置大小排序。 首先我们注意到: 对于 i ....x.....j,x表示现在的机器人的位置。 如果x现在在修复了i,那么位于x和i之间的所有位置都是已经修复好的了,因为我们当前已经到了i,那么我们就可以顺便修复了x和i之间的位置,这绝对不会增加最终的总费用。所以得出了
2015-10-10 17:57:48 1053
原创 uva 10118 - Free Candies-动态规划
//// main.cpp// uva 10118 - Free Candies-动态规划/* 这一题是多阶段决策问题.另外注意的就是状态压缩。即使用二进制表示当前的pocket具有的糖果的颜色。 在每一步选择哪一个管道决定了下一步。 我们设d[i][j][k][l] 表示依次从第一,第二个管道,第三个管道,第四个管道,当前已经到达的位置,剩下可以获得的candies对数。 这里
2015-10-07 23:22:54 404
原创 uva 1220 - Party at Hali-Bula
//uva 1220 - Party at Hali-Bula/* 赤裸裸的树的最大独立集 对于以i为根的子树,其最大独立集为 d[i]. 则有 d[i] = max(sum(d[j]),sum(d[k]) +1 ) . 其中d[j]表示 d[i]的儿子节点最大独立集.d[k]表示d[i]的孙子节点的最大独立集。 在这里我们可以使用递归的方法来求得这个d数组。使用flag标记当取得最
2015-10-03 23:52:05 413
原创 uva 12186 - Another Crisis-树上动态规划
// uva 12186 - Another Crisis-树上动态规划/* 典型的树形动态规划问题: 此题题目意思很简单,也很好想到解法,但是就是写程序需要注意。 设d[i]表示以节点i为向上级提交申请需要工人签字的人数。 那么对于节点i,d[i] 是节点i子节点 d[j]集合的最小的前c个值,c为满足直属下属签字率至少为T时签字的人数。 在计算时我们采用了递归的方式。还有就是这
2015-10-03 16:08:15 401
原创 uva 1626 - Brackets sequence
//// main.cpp// uva 1626 - Brackets sequence/* 这一题应该是经典的矩阵类似问题。 显然 需要使用两个变量来表示最终的结果。 设 dp[i][j]表示第i个位置到第j个位置变成合法形式需要添加的字符数。 注意题目中的合法形式,1-->(A),2-->[A] , 3-->AB 。三种。 这里 1.如果形式1或者2.则有 dp
2015-10-01 22:50:34 434
原创 uva 11400 - Lighting System Design
// uva 11400 - Lighting System Design/* 照明系统设计 使用四个变量标记一个 灯泡 电压V , 电源价格K , 灯泡价格C, 灯泡数量L 首先应该想到:替换时要不全部替换,要不就是不替换。 假设 i比j单价大,那么使用i替换j的话 ,如果只替换一部分,则单价价格肯定会高,当全部替换时j中的电源的价格与替换后单价增加的cost会抵消(到
2015-09-30 17:33:40 347
原创 uva 1025 - A Spy in the Metro
// uva 1025 - A Spy in the Metro/*此题题意不难。 注意到其中有个时间,这个是一个天然的序。还有就是在时间t时所在的位置。这两个因素影响最终的答案。 因此我们使用二个变量i,j。设dp[i][j]表示在时间i,所处车站为j等待的最少时间,那么最终的答案就是 dp[T][n]。这样设了之后,dp[i][j] = min{dp[i-1][j] ,dp[i-1]
2015-09-29 12:38:36 423
原创 后缀数组代码详解
//// main.cpp// 后缀数组模板详解//// Created by XD on 15/9/24.// Copyright © 2015年 XD. All rights reserved.//#include using namespace std ;const int maxn = 10000 ;int s[maxn] ;int sa[maxn],t1[
2015-09-24 10:50:45 512
原创 hdu 2871 -Memory Control--线段树
我去此题我简直不想喷了,三个小时没检查出ql和qr弄反了。我简直受不了啊//// main.cpp// hdu 2871 -Memory Control--线段树//// Created by XD on 15/9/13.// Copyright (c) 2015年 XD. All rights reserved.#include #include #include
2015-09-14 10:42:40 355
原创 poj 3667 线段树-区间的前缀和后缀
//// main.cpp// poj 3667 线段树-区间的前缀和后缀//// Created by XD on 15/9/13.// Copyright (c) 2015年 XD. All rights reserved.///* 线段树的区间更新 这里需要注意的是线段树的每个节点应该保存什么样的属性。 这里是要找到一个区间使得其长度为d,且左边的值最小。我们保持
2015-09-13 17:09:33 514
原创 uva 12299 - RMQ with Shifts--- 线段树单点更新
//// main.cpp// uva 12299 - RMQ with Shifts--- 线段树单点更新//// Created by XD on 15/9/10.// Copyright (c) 2015年 XD. All rights reserved.///* 线段树单点更新 */#include #include #include #include
2015-09-10 21:20:04 471
原创 uva 1513 - Movie collection--树状数组--预留前n个位置
//// main.cpp// uva 1513 - Movie collection--树状数组--预留前n个位置//// Created by XD on 15/9/10.// Copyright (c) 2015年 XD. All rights reserved.///* 树状数组 做法就是预留前m个位置给后面的要看的的video,因为他们要移到顶端,所以我们就可以
2015-09-10 16:43:58 333
原创 uva 12086 - Potentiometers--树状数组
//// main.cpp// uva 12086 - Potentiometers--树状数组//// Created by XD on 15/9/10.// Copyright (c) 2015年 XD. All rights reserved.///* 树状树组, */#include #include #include #include #include
2015-09-10 15:50:30 380
原创 soj 1030: Sum It Up--迭代加深搜索
题目大意:就是给定一个值,再给定以个整数序列,求从序列总选择出一定的数,来使得,其和为给定的值,并按照要求输出所有的解。此题就是一个简单地深搜题。注意的点就是注意 按照数字的大小输出,也就是数字的字典序。我们可以先做游程编码,然后组成了一个新的序列。将这个序列按照key值升序。在深搜的时候以当前key值的次数降序的搜索。//// main.cpp// soj 1030: Sum
2015-09-08 20:58:04 395
原创 uva ---11136 Hoax or what--优先队列即可
//// main.cpp// uva 11136 - Hoax or what---优先队列//// Created by XD on 15/9/5.// Copyright (c) 2015年 XD. All rights reserved.//#include #include #include #include #include #include #in
2015-09-06 00:21:33 326 1
原创 uva 11988 - Broken Keyboard (a.k.a. Beiju Text)----链表快速插入
//// main.cpp// uva 11988 - Broken Keyboard (a.k.a. Beiju Text)----链表快速插入//// Created by XD on 15/9/5.// Copyright (c) 2015年 XD. All rights reserved.///* 此题就是一道简单的链表题。注意一下当前的位置,起始位置和结束位置。
2015-09-05 23:27:13 354
原创 ural -1297. Palindrome----后缀数组解决最长回文串的问题
此题就是问一个只含有字母的的字符串中的最长的回文串是什么。如果有多解的话,打印出最先出现的那个。首先考虑到回文串的特点。那么我们的肯定想到将字符串反转,并加到原字符串后面,用一个字符隔开。然后就是求后缀的最长前缀。这里最长前缀是我们已知道的算法。这里我们不适用RMQ来解。只要一个O(n)的时间就可以解决了。遍历一下height数组就行了。具体见代码。//// main.cpp
2015-09-05 21:51:35 505
原创 spoj -705 New Distinct Substrings--后缀数组
每个子串一定是某个后缀的前缀,那么原问题等价于求所有后缀之间的不相同的前缀的个数。如果所有的后缀按照 suffix(sa[1]), suffix(sa[2]),suffix(sa[3]), ...... ,suffix(sa[n])的顺序计算,不难发现,对于每一次新加进来的后缀 suffix(sa[k]),它将产生 n-sa[k]+1 个新的前缀。但是其中有height[k]个是和前面的字符串
2015-09-05 16:16:06 351
原创 uva 11019 - Matrix Matcher --AC自动机
题目大意:给定一个n*m的矩阵t,在给定一个x*y的字符矩阵P,现在问在t中能够找到多少个这样的矩阵使得和P相同。此题解法比较易懂。设cnt[r][j]表示以(r,i)为矩阵的左上角的矩阵与P对应相同的行数有多少个,这样cnt==x的就是满足题意个一个矩阵。所以就可以利用ac自动机来做了。以p的每一行来建立自动机。//// main.cpp// uva 11019 - Matr
2015-08-31 18:02:57 347
原创 uva 11468-Substring ac自动机 + 记忆化搜索
题目大意:给定k个模式串,然后给定在每一步中字母被选中的概率,求获得长度为L的字符串的且其中不包含任何模式串的概率是多少。 此题既然给定的是模式串,我们首先想到肯定是要建立自动机,但是建立自动机之后该怎么办呢?这里就要思考,符合题意的串到底该如何求得呢?ac自动机说道底就是状态的转换。在构造串时就是没每一步选择一个字符,一旦选择了这个字符,那么现在的串的任何后缀不能是任何模式串。因为如
2015-08-31 15:28:38 328
转载 矩阵的是个经典题目--转自Matrix67:
十个利用矩阵乘法解决的经典题目 好像目前还没有这方面题目的总结。这几天连续看到四个问这类题目的人,今天在这里简单写一下。这里我们不介绍其它有关矩阵的知识,只介绍矩阵乘法和相关性质。 不要以为数学中的矩阵也是黑色屏幕上不断变化的绿色字符。在数学中,一个矩阵说穿了就是一个二维数组。一个n行m列的矩阵可以乘以一个m行p列的矩阵,得到的结果是一个n行p列的矩阵,其中的第i行第j列位
2015-08-30 20:32:50 443
原创 uva uva 1328 - Period ---KMP算法
此题是kmp算法的简单地应用。这里总结一下KMP算法。KMP算法其实就是比朴素算法多利用了已经比较过得1--(i-1)的字符,在其中找到当前不匹配时时,下一步应该从哪一个位置开始比较(最优的位置)。这样就避免了主串的回朔。这里主要是要说明一下next数组。网上一搜就会出现一大把。但是我看了之后认为需要注意的地方。(建议画图)首先next数组是使用递推来算出来的。假设目前next
2015-08-27 22:32:47 431
原创 uva 11235 Frequent values RMQ问题
题目:给你一个n个数字的序列,且序列是不降的,现在问,对于每个询问query(i ,j),序列ai...aj中出现次数最多的那个数的出现次数是多少。分析:此题应该是经典问题。首先进行游程编码(Run length encoding,RLE)。就是统计以某个值开始的连续出现次数。即(a,b)连续的a值有b个。这样整序列就变成了以(a,b)为序列元素的另一个序列。再看对于一个询问,qu
2015-08-22 13:51:38 362
原创 LA 4329 - Ping pong 树状数组
题目:先分析此题:此题要求的是找到三个人,使得其住的地方是递增的,且当裁判的那个人的能力值在对决的两个人的能力值之间。一开始想枚举对决的两个人,由于n比较大,所以枚举只能是其中一个,但是最后发现,这样的话,太难确定此人的对手和裁判了。所以目光应该转向裁判,我们可以枚举裁判。只要知道裁判的左右比比其大的值就行了。首先想到是的遍历,遍历肯定是能够达到我们想要的值的,但是复杂度高。我们必
2015-08-21 22:48:42 471
原创 uva 10706 Number Sequence
//// main.cpp// uva 10706 - Number Sequence//// Created by XD on 15/8/20.// Copyright (c) 2015年 XD. All rights reserved.////此题就是二分查找的应用 ,找到当前的n应该在哪个数的序列上,然后二分查找找到在这个数的哪个位置 二次二分查找就解决了问题#in
2015-08-20 15:45:26 403
原创 uva 10366 - Faucet Flow
题目大意:A faucet is pouring water into a long, thin aquar-ium with various vertical dividers (walls) in it. Theaquarium is initially empty, and its bottom is per-fectly level. How long will it ta
2015-08-19 22:23:57 461
原创 uva 1623 - Enter The Dragon
题目大意:一个城市里有n个湖,每个湖中是装满水的。现在天气预报给定了后面m天得天气情况,对每一天,要么不下雨,要么就对某一个湖下雨。在一个装满水的湖上下雨,会导致水灾,所以请来了龙来喝水,龙只在不下雨的时候喝水,现在问如何安排在不下雨的天喝哪壶水才能使得不发生水灾。解题:贪心。即将要下雨的湖肯定是不能够装满水的,所以我们得找到在它之前的最远的一个不下雨的天,来喝它这湖水。注意湖要是装满
2015-08-19 19:12:37 737
原创 uva 1614 Hell on the Markets
题目大意:给定n个数字序列,1首先应该知道:如想满足题意,则原序列的和为偶数。第二就是如何解读题中给定的元素的不等式。我也是看了别人的报告才知道的。 就是1---sum[i]的每个数都可以使用这个序列的全部后者部分数的和组合而成。使用数学归纳法可以证明。这样我们就可以从n-1开始逆序的查找是否可以组合成sum/2即t.算法是如果当前值大于t,则看下一个数,如果当前值小于t,
2015-08-18 22:49:39 334
原创 uva 1619 - Feel Good
题目大意:此题是给定一个n个数字的序列,求其中的一个连续序列使得 (al......ar) * min{al........ar}。最小。其中数字不存在负数,且最大值不大于1000000。n 看到这个数据量复杂度应该是要为nlogn的或者更小。这样的数据量暴力枚举是不可能的,如果枚举起始位置或终止位置都是不行的,因为无法在logn的时间内确定这个起始位置或者终止位置的最大值。我们把目光转向题中
2015-08-18 14:31:03 732
原创 uva 11536 Smallest Sub-Array
题意:就是给定一个n个数字的序列,然后给定下面生成n个数字序列的m值,再给定k值,问最少的连续序列长度使得其中包含1……k所有值。X1= 1X2= 2X3= 3Xi= (Xi−1+ Xi−2+ Xi−3)%M+ 1 fori = 4 toN 此题应该是窗口滑动问题的经典了吧。做法如下:使用栈来当窗口的存储载体。
2015-08-17 23:48:34 353
原创 uva 10570 meeting with aliens
//// main.cpp// uva 10570 - Meeting with Aliens//// Created by XD on 15/8/17.// Copyright (c) 2015年 XD. All rights reserved.///* 这题我也是醉了,看错题了,一位只能相邻的可以交换,害的我好久没想出来。 现在时任意两个都可以交换,那么就好做了。
2015-08-17 20:50:40 330
原创 uva uva 1153 - Keep the Customer Satisfied
题目大意:给定n个任务的截止时间和完成任务所需的时间,现在问最多可以完成多少件任务。此题看上去跟区间问题差不多,但是时间上无法确定区间是什么。但是思想都是一样的,就是尽量在较短的时间内完成同样多的任务。先按截止时间排序,然后对于一个任务,看已选择的任务中存不存在,这样的情况使得 完成任务时间大于当前的任务,如果存在,则删去已选择的,压入当前的。可用反证法证明。另外遇到了一个让人无法理解
2015-08-17 16:26:03 473
原创 uva uva 1612 - Guess
//// main.cpp// uva 1612 - Guess//// Created by XD on 15/8/16.// Copyright (c) 2015年 XD. All rights reserved.///* 暴力枚举 + 精度 + 二分查找 此题并不难。。最后一名的可能获得分数最多有8种。只要枚举就行了。 然后就是判断这个分数是否可行。 关键就是判
2015-08-16 23:41:59 414
原创 uva 1611 - Crane
//// main.cpp// uva 1611 - Crane//// Created by XD on 15/8/16.// Copyright (c) 2015年 XD. All rights reserved.///* 此题就是找到一种排序方法,使得序列升序最后打印出最终的操作序列。 这里只要找到一种方法就行。 这里采用了二分,逐步向目标位置靠近。 */
2015-08-16 16:30:50 398
原创 uva 11491 - Erasing and Winning
就是给定 一个长为n的数字串,要求删去d个数字,使得剩下的数字组成的数最大。。。。。。这里转化一下我们求选择n-d个数字看最大是多少。。注意题目给的没有前导0.//// main.cpp// uva11491 - Erasing and Winning//// Created by XD on 15/8/16.// Copyright (c) 2015年 XD. Al
2015-08-16 14:55:23 437
原创 uva 12545 Bits Equalizer
You are given two non-empty stringsS andT of equal lengths.S contains the characters ‘0’, ‘1’and ‘?’, whereas T contains ‘0’ and ‘1’ only. Your task is to convert Sinto Tin minimum n
2015-08-16 11:28:46 381
电脑共享无线wifi安装包
2019-02-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人