自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Jinx Jinx again

what doesnt kill U makes U stronger

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

原创 Zoj 3380 Patchouli's Spell Cards (概率dp)

题目大意:用(1 2 3 ... n) n个数填充 m个位置,问最少相同的数字出现的数量不少于I 的概率思路分析:逆向思考,求铺满最多的数量不够I 个的方案数。每次用一个数字去铺,铺M个位置,每个数字最多铺 不够I个。dp[i][j]表示枚举到了第i个数字,前i个数字铺了j个位置的方案数。考虑到组合计数用Javaimport java.util.*;

2015-04-10 14:50:52 831

原创 Hdu 5200 Trees (离线线段树)

题目大意:校门外栽满了不同高度的树,每一次询问是 如果砍掉所有高度不超过q的树,那么还有多少个连续的块。思路分析:记录左连续和   右连续和  用来维护区间的连续块的数量。即seg[num] = seg[num如果中间部分连起来  那么减一即可。#include #include #include #include #define maxn 50

2015-04-09 20:47:47 669

原创 Codeforces 148D Bag of mice(概率dp)

题目大意:黑箱子里有w只白老鼠和b只黑老鼠,dragon和Princess轮流从箱子中拿出一只老鼠,先取到白老鼠的人赢,但是dragon每次拿的时候都会多跑出一只老鼠。思路分析:dp[i][j] 表示箱子里有i只白老鼠和j只黑老鼠的时候 Princess 先取赢的概率。那么转移方程就有4个。分别是 :直接取到白老鼠取到黑老鼠,dragon也拿到了黑老鼠,跑了一只

2015-01-19 15:07:56 866

原创 Hdu 4771 Stealing Harry Potter's Precious (搜索)

题目大意:地图上有最多4件物品,小偷要全部拿走,问最少的路程。思路分析:考虑到物品数量只有4。可以先用最多5次bfs求出每个目标点到其他目标点的距离。然后枚举依次拿取物品的顺序,用next_permutation...#include #include #include #include #include using namespace std;

2014-11-20 21:26:56 955

原创 Hdu 3962 Microgene (AC自动机+矩阵)

题目大意:构造一个串使得有两个以及两个以上的目标串。长度为L的所有串中有多少个这样的串。思路分析:用所有的数量减去只有1个和没有目标串的数量就是答案了。如果数据很小,可以用dp解。dp[i][j][k] 表示长度为i,走到自动机的j,有k个目标串的数量。转移便是。if(j->next[d] ->isword) dp[i+1][j->next][1] += dp[i]

2014-10-04 19:47:20 1320

原创 Hdu 2243 考研路茫茫——单词情结 (AC自动机+矩阵)

哎哟喂,中文题。。。不说题意了。首先做过POJ 2778可以知道AC自动机是可以求出长度为L的串中不含病毒串的数量的。POJ 2778的大概思路就是先用所有给的病毒串建一个AC自动机,然后将AC自动机上所有非单词节点连一个边。离散数学中有说道,如果矩阵A 中的 [i][j] 表示 i节点通过一条边可以走到j节点的方法数。那么A*A这个矩阵的[i][j]就表示 i 节点到j

2014-10-04 16:35:12 1257 1

原创 Zoj 3535 Gao the String II (AC自动机+dp)

题目大意:用集合A中的串构造出一个串,使之让更多的setB中的串成为他的子串。思路分析:和 Codeforces 86C 差不多。不过这里是要用A中的构造。先用A 和 B的串构造一个自动机。然后对于A集合的尾结点给出一个最大后缀匹配,对于B集合的尾结点给一个权值。dp[i][j][k] 表示已经构造出来了一个长度为i的串,现在走到了自动机的j结点,i长度后面有k

2014-10-03 14:48:03 1350

原创 Codeforces 86C Genetic engineering (AC自动机+dp)

题目大意:要求构造一个串,使得这个串是由所给的串相连接构成,连接可以有重叠的部分。思路分析:首先用所给的串建立自动机,每个单词节点记录当前节点能够达到的最长后缀。开始的时候想的是dp[i][j]表示长度为i,走到自动机的j节点的答案。但是显然既然是可以重复覆盖的,那么每一个节点的dp值都并不是最优的,因为可以从一个地方截断去连接另外一个串。所以正确姿势就是dp [i

2014-10-02 21:43:19 1663

原创 Hdu 3341 Lost's revenge (ac自动机+dp+hash)

题目大意:给出很多个DNA串,每一个串的价值为1,最后给出一个长串,要你重新排列最后的串使之它所有的子串的权值和最大。思路分析:最先容易想到的思路就是搜!管她3721。。直接一个字符一个字符的码,然后在AC自动机上判断最后的权值。TLE哟。然后发现搜过不去,那就dp咯。再容易想到的就是dp[i][a][b][c][d] 表示此时遍历AC自动机的节点在i,然后构成了a个A,b

2014-10-02 17:55:01 1062

原创 Zoj 3545 Rescue the Rabbit(ac自动机+dp)

题目大意:给出的DNA序列有一个权值,请构造一个长度为I的DNA序列使得在这段DNA序列的权值最大。如果为负数就输出噼里啪啦。。。思路分析:构造序列就是在ac自动机上走,求最大要用到dpdp[i][j][k] 表示现在构造到了长度 i 。此时的我们把当前字符放在j节点,并且满足了k状态。k是一个10位的2进制状态压缩。注意这道题上有坑就是一个序列可能有多个权值。所以不能

2014-10-02 14:45:31 1095

原创 Hnu 11187 Emoticons :-) (ac自动机+贪心)

题目大意:破坏文本串,使之没有没有出现表情,破坏就是用空格替换。问最少需要破坏多少个字符。思路分析:初看跟Hdu 2457 没什么区别,其实Hdu2457是要求将字符替换成ACGT,而这个只需要替换成空格。而空格是在表情串中不曾出现的,所以要破坏的时候就要遍历的指针赋为根节点,继续遍历。。每一次变成根的时候ans就加一。#include #include

2014-10-01 19:28:02 998

原创 Hdu 2457 DNA repair (ac自动机+dp)

题目大意:修改文本串的上的字符,使之不出现上面出现的串。问最少修改多少个。思路分析:dp[i][j]表示现在 i 个字符改变成了字典树上的 j 节点。然后顺着自动机一直转移方程。注意合法与不合法。#include #include #include #include #define inf 0x3f3f3f3fusing namespace std

2014-10-01 18:25:14 958

原创 Hdu 5052 Yaoge’s maximum profit(树链剖分)

题目大意:给出一棵树,每个点有商店,每个商店都有一个价格,Yaoge每次从x走到y都可以在一个倒卖商品,从中得取利益,当然,买一顶要在卖之前。但是没次走过一条路,这条路上的所有商品都会增加一个v。输出每次的最大利益。思路分析:很容易想到树链剖分,可是关键在于如何维护这样一个变量,使得每次都要让买的再卖的前面。维护变量 ltr 和 rtl ,表示从左去右和从右去左。剖

2014-10-01 16:19:44 1339

原创 UvaLive 6667 Longest Chain (分治求三维LIS)

题目大意:题目给出了定义的小于号,然后求出一个LIS。。。思路分析:这道题目的是一个严格递增的,和 Hdu 4742 类似。只不过Hdu的这道题是一个不递减的序列。简单说一下Hdu 4742的做法。首先我们可以想到的是一维的LIS,那么简单就是n。然后二维的LIS,就是先排序一维,然后用求第二维的LIS。现在问题扩展到三维。依然排序一维。假设我们排序的是z。

2014-09-26 19:24:02 1445

原创 Hdu 5030 Rabbit's String (后缀数组)

题目大意:要求将一个长串分解成最多k个子串,使得分开的n个串的字典序最大的那一个子串的字典序最小。思路分析:要最大的最小,不难想到二分的。我们二分出原串中的第rk大子串就是目标串。现在就是怎么判断这个串满足要求,也就是我们如何分其他部分,使之成为字典序最大的一个。我们可以通过rk轻易的找到这是哪一个串,假设它处在sa[t]中。那么可以知道 在 sa数组中t以前的

2014-09-25 16:22:52 1321

原创 Hdu 5032 Always Cook Mushroom (树状数组)

题目大意:在一个1000*1000的二维平面上,每一个整点都有一个权值,权值大小是 the production in the grid points (x, y) is (x + A)(y + B) where A, B are two constant. 思路分析:先离线处理出所有的询问,对于每一个询问都有一个极角,按照极角排序。然后对于平面上每一个点,都依次的加入到B

2014-09-25 00:45:41 1252 1

原创 Hdu 4699 Editor(Splay)

题目大意:给出一个文本编辑器,按照图示的操作进行删减和添加。思路分析:对于如何维护左边最大,就要记录每个区间的左边最大,还有这个节点的值,还有子区间的和。注意看题目,题目的要求输出左边最大是不能为空集的,意味着如果全部都是负数,那么就输出最左边的负数就好。那么就要解决初始化的问题。再有一点问题就是会有很多个连续的L ,R操作。所以要判断边界。#inclu

2014-09-24 14:55:28 884

原创 Hdu 4419 Colourful Rectangle(线段树扫描线)

题目大意:给出多个不同颜色的矩形,求最后覆盖的颜色的面积。思路分析:我是自己手动暴力枚举。比赛的时候漏了一种情况。RGB 可以从 RG+RB组合来(只是举例,就是说可以从两种颜色组合而来)。然后就只需要维护所有的颜色用扫描线来判断。#include #include #include #include #define MAXN 42222u

2014-09-24 00:03:17 1079

原创 Hdu 5029 Relief grain(树链剖分)

题目大意:给出一棵树。然后有m个操作,每个操作都在两点的路径上分配不同的粮食。最后要求输出所有村庄有的最多的粮食的种类。思路分析:一眼就看得出来是树链剖分的题目。现在的问题就是,每一次操作,如何维护每个点的最多的食物编号,以及最多的食物的数量。要记录这两个值是肯定的。首先可以想到将所有的操作按照z排序。这样每一回合操作,称一回合为处理同一种颜色。一回合结束之后,

2014-09-22 22:05:55 1099 2

原创 hdu 4777 Rabbit Kingdom (离线树状数组)

题目大意:给出m个查询,查询出[ l - r] 之间去 这个区间所有的数都互质的数有多少个。思路分析:首先我们处理出来每一个位置,左边和右边第一个与之不互质的数的位置。记在pre 和 next下。这个方法用分解质因数就好。一个区间内的答案,等于这个区间的所有数减去有与之互质数的个数。现在要统计的就是1.对于一个给定的查询[l,r] 区间,统计有多少个 i (l2

2014-09-07 00:32:15 1196

原创 Hnu 10104 病毒 (AC自动机+dfs)

病毒Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:32768KBTotal submit users: 41, Accepted users: 23Problem 10104 : No special judgementProblem description二进制病

2014-09-03 11:51:08 1357

原创 Poj 2778 DNA Sequence (AC自动机+矩阵)

题目大意:给出N个串,问在长度为L的所有串中,不包含任一已知串的个数有多少个。思路分析:已知一个矩阵A,A[i][j] 表示 节点i 到 节点 j 有一条变可以到达的方法数。那么A^2 ,这个矩阵的 [i][j] 就代表这个节点 i 到节点 j 有两条边可以到达的方法数。那么知道这个结论,我们要做的就是求一个节点到另外一个节点,要经过L条变(对应这长度为L的单词),而又

2014-09-02 12:41:27 888

原创 Hdu 4117 GRE Words (后缀数组+dp)

题目大意:求出最多能记住的单词的权值和,要求最大。记住的规则就是上一个单词是这个单词的子串。思路分析:首先得声明这题是数据水了才能用sa做的。sa的复杂度最多可以达到 Orz(sumlen * sumlen) ...所以我们sa处理的就是这个串是否是下一个串的子串,如果是就转移方程。dp[i] = max (dp[i] , dp[j] + val[i])...

2014-08-30 23:10:57 821

原创 SPOJ 7758. Growing Strings (ac自动机+dp)

题目大意:给出了N个串。问最多有多少个串组成的序列,是可以由上一个串通过左右两边加字符构成的。思路分析:在trie上的dp在建立自动机的时候,得到fail的同时,用dp记录这个串作为最后一个串所可以得到的最多的满足要求的串的数量。那么 dp[i] = max(dp[i在trie上的的父亲节点],dp[i的fail节点] )+ 以i节点结尾的单词的数量,注意不是以i字符结

2014-08-29 14:36:33 947

原创 Hdu 4016 Magic Bitwise And Operation (暴搜 dfs)

题目大意:在n个数中选取k个数,是他们的按位与最小。思路分析:开始往dp想,但是这道题是不满足子问题的。当前的值最小,但是丢掉了和后面的1错开的最多的状态。暴搜的剪枝:1.与后面所有的树相与都比ans小,剪掉,因为越与越小。2.先将所有的数排序,先取小的。3.ans可以不断更新,不需要达到k的时候更新,原因和1相同。#include #incl

2014-08-27 16:28:56 1004

原创 Zoj 3430 Detect the Virus (AC自动机)

题目大意:给出来n条64base的病毒编码序列。再给出m条模式串,让你反编码之后求出里面包含多少病毒序列。思路分析:很裸的AC自动机了。但是各种恶心。动态开trie 静态开queue 就会RE。全部动态开辟就会MLE。各种姿势之后静态开trie 动态开queue才能AC。#include #include #include #include

2014-08-27 13:37:37 755

原创 POJ 1655 Balancing Act(求树的重心)

题目大意:就是要求树的重心,重心的定义就是删除这个点使得森林尽量平衡。也可以让分治子树的时候使得每颗子树的数量在nlogn以内。思路分析:son [x] 表示x的子树的数量  不包括自己。balance 表示最大的森林的节点数。最后我们要让最大的balance 最小。balance = max (balance ,n - 1 - son[x]  , son[j]

2014-08-22 23:50:53 722

原创 Hdu 3966 Aragorn's Story (树链剖分)

题目大意:对一颗树上进行路径加减,然后询问单点的值。思路分析:简单的树链剖分模板题。#include #include #include #include #pragma comment(linker,"/STACk:10240000,10240000")#define maxn 50005#define lson num<<1,s,mid#define rs

2014-08-20 22:01:27 844 2

原创 Hdu 4967 Handling the Past (线段树)

题目大意:关于网络阻塞命令延迟的处理。命令就分为三种对栈的处理。但是如果接收到一个操作,它后面的操作都要先取消不做,再做这个操作,再做之前取消了的操作。思路分析:题目也就转化成了,给出一个时间t接收到peak操作,找到第一个最大的 l ,使得 sum[l - t] > 0...然后的问题我们就是如何确定最大的l。我们记录sum的同时再记录一个右边最大。然后我

2014-08-20 16:33:31 908

原创 zoj 3626 Treasure Hunt I (树形dp)

题目大意:给出一棵树,求出从起点开始走m长度最后回到起点,所能得到的宝藏的最大价值。思路分析:通过一次dfs可以得到的是子树到根节点的所有距离的最大值。现在的问题就是他走完一颗子树可以去另外一颗子树。所以在回溯到根的时候要统计其他子树上互补距离的最大值。dp[i] [j] 表示i为根节点,在i的子树中走j步然后回到i所能拿到的最大价值。转移方程就是d

2014-08-19 10:19:24 893

原创 codeforces 161D - Distance in Tree(树形dp)

题目大意:求出树上距离为k的点对有多少个。思路分析:dp[i][j] 表示 i 的子树中和 i 的距离为 j 的点数有多少个。注意dp[i] [0] 永远是1的。然后在处理完一颗子树后,就把自身的dp 更新。更新之前更新答案。如果这颗子树到 i 有 x 个距离为j的。那么答案就要加上 dp[i] [ k-j-1] * x;#include #inclu

2014-08-18 19:46:37 836

原创 Hdu 2196 Computer (树形dp)

题目大意:求出每一个结点距离叶子节点的最大距离。思路分析:假设1为树的根。通过一遍dfs 可以求出每个节点到儿子节点上的叶子节点的最远距离。然后我们要做的就是如果更新答案。问题就是如果我们开始求的最大值本来就是一个儿子更新的,如果再深搜的话又会造成重复更新。所以就记录两个值,最大值和次大值。然后不断更新这两个值。#include #includ

2014-08-18 16:34:41 707

原创 ZOJ 3469 Food Delivery (区间dp)

题目大意:一条直线的街道上, 在x位置有一家餐厅。现在街上有 N 个客户同时点餐,每个客户都有一个不开心的值的增加速度。每一分钟未到,就会增加v。现在要使所有客户的不开心值最小。思路分析:开始想的应该是贪心的。先送完一边再去送完另外一边。但是如果每边都有一个点离餐厅的距离非常大。但是其他的距离都很小。那么此时的最优就是先送完两边小的。所以dp[i] [j

2014-08-18 13:13:36 724

原创 codeforces 149D - Coloring Brackets (区间dp)

题目大意:给出一组合法的括号。括号要么不涂颜色,要么就涂上红色或者绿色。匹配的括号只能有一个有颜色。两个相邻的括号不能有相同的颜色。思路分析:因为是一个合法的括号序列。所以每个括号与之匹配的位置是一定的。那么就可以将这个序列分成两个区间。 (L - match[L] )  (match[L]+1, R)用递归先处理小区间,再转移大区间。

2014-08-17 16:28:18 1425

原创 POJ 1141 Brackets Sequence (区间dp 记录路径)

题目大意:给出一种不合法的括号序列,要求构造出一种合法的序列,使得填充的括号最少。思路分析:如果只要求输出最少的匹配括号的数量,那么就是简单的区间dpdp[i][j]表示 i - j 之间已经合法了最少添加的括号数。转移 就是 dp[i] [j] = min  (dp[i+1][j]+1 , dp[ i+ 1] [ k -1 ] + dp[k+1] [j] (i k 位

2014-08-17 14:50:59 719

原创 POJ 1651 Multiplication Puzzle (区间dp)

题目大意:在一串数字中取出除了两端的两个数字,求出最小的代价,代价就是每取出一个数,都要加上它与它相邻的两个数的积。思路分析:状态方程 :dp [i] [j] 是区间 [i , j] 已经全部取完,只剩下 i j所剩的最小代价。状态转移 :dp [i][j] = min (dp [i][j], dp[i][k] + dp[k] [j] + a[i]*a[k]*a[j]) .

2014-08-16 16:31:08 709

原创 POJ 3280 Cheapest Palindrome (区间dp)

题目大意:给你m个字符,其中有n种字符,每种字符都有两个值,分别是增加一个这样的字符的代价,删除一个这样的字符的代价,让你求将原先给出的那串字符变成回文串的最小代价。思路分析:状态方程:dp[i][j] 表示 区间 i-j是回文串的最小代价。状态转移:有三种情况。1、 i+1 ~ j 已经是回文串了,那么对于 i 这个字符,要么删除掉,要么在这个回文串后面加一个 s

2014-08-15 16:43:49 560

原创 POJ 2955 Brackets (区间dp)

题目大意:两种括号匹配,求最长的匹配长度。思路分析:状态方程:dp [i][j] 表示区间 i ~ j 之间最长的匹配长度。转移方程:dp [i][j]  = max (dp[i+1][j] , dp[i] [j-1 ] , dp[i+1][k-1] + dp[k+1][j] +2 (条件是i ,k 位置匹配))#include #include #incl

2014-08-15 16:01:02 556

原创 hdu 4691 Front compression (后缀数组)

题目大意:介绍了一种压缩文本的方式,问压缩前后的文本长度。思路分析:后缀数组跑模板然后考虑两次l r之间的lcp。然后减掉重复的长度。注意ans2的累加。#include #include #include #include #include #define maxn 200005using namespace std;typedef lon

2014-08-13 15:43:02 865

原创 hdu 4939 Stupid Tower Defense (dp)

题目大意:简单的塔防游戏,有三种塔。一种是减速塔,只能减速它身后的敌人,使之移动速度减慢。通过一格的时间变成加z秒。两种攻击塔,一种只能打面前,另外一种可以打身后。思路分析:我们默认把只能攻击面前的塔放到最后面。状态方程: dp [i] [j]  表示放到第 i 个位置放了 j 个防御塔能达到的最大伤害。转移方程:dp [i] [j] =max ( dp

2014-08-13 13:40:56 591

空空如也

空空如也

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

TA关注的人

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