<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Jinx Jinx again]]></title><description><![CDATA[what doesnt kill U makes U stronger]]></description><link>https://blog.youkuaiyun.com/u010709592</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; u010709592]]></copyright><item><title><![CDATA[Zoj 3380 Patchouli's Spell Cards (概率dp)]]></title><link>https://blog.youkuaiyun.com/u010709592/article/details/44979265</link><guid>https://blog.youkuaiyun.com/u010709592/article/details/44979265</guid><author>u010709592</author><pubDate>Fri, 10 Apr 2015 14:50:52 +0800</pubDate><description><![CDATA[题目大意：
用(1 2 3 ... n) n个数填充 m个位置，问最少相同的数字出现的数量不少于I 的概率


思路分析：
逆向思考，求铺满最多的数量不够I 个的方案数。
每次用一个数字去铺，铺M个位置，每个数字最多铺 不够I个。
dp[i][j]表示枚举到了第i个数字，前i个数字铺了j个位置的方案数。


考虑到组合计数
用Java
import java.util.*;]]></description><category></category></item><item><title><![CDATA[Hdu 5200 Trees （离线线段树）]]></title><link>https://blog.youkuaiyun.com/u010709592/article/details/44965195</link><guid>https://blog.youkuaiyun.com/u010709592/article/details/44965195</guid><author>u010709592</author><pubDate>Thu, 09 Apr 2015 20:47:47 +0800</pubDate><description><![CDATA[题目大意：
校门外栽满了不同高度的树，每一次询问是 如果砍掉所有高度不超过q的树，那么还有多少个连续的块。


思路分析：
记录左连续和   右连续和  用来维护区间的连续块的数量。
即
seg[num] = seg[num
如果中间部分连起来  那么减一即可。


#include 
#include 
#include 
#include 
#define maxn 50]]></description><category></category></item><item><title><![CDATA[Codeforces 148D Bag of mice(概率dp)]]></title><link>https://blog.youkuaiyun.com/u010709592/article/details/42873527</link><guid>https://blog.youkuaiyun.com/u010709592/article/details/42873527</guid><author>u010709592</author><pubDate>Mon, 19 Jan 2015 15:07:56 +0800</pubDate><description><![CDATA[题目大意：
黑箱子里有w只白老鼠和b只黑老鼠，dragon和Princess轮流从箱子中拿出一只老鼠，先取到白老鼠的人赢，但是dragon每次拿的时候都会多跑出一只老鼠。


思路分析：
dp[i][j] 表示箱子里有i只白老鼠和j只黑老鼠的时候 Princess 先取赢的概率。
那么转移方程就有4个。
分别是 ：
直接取到白老鼠
取到黑老鼠，dragon也拿到了黑老鼠，跑了一只]]></description><category></category></item><item><title><![CDATA[Hdu 4771 Stealing Harry Potter's Precious (搜索)]]></title><link>https://blog.youkuaiyun.com/u010709592/article/details/41321601</link><guid>https://blog.youkuaiyun.com/u010709592/article/details/41321601</guid><author>u010709592</author><pubDate>Thu, 20 Nov 2014 21:26:56 +0800</pubDate><description><![CDATA[题目大意：
地图上有最多4件物品，小偷要全部拿走，问最少的路程。


思路分析：
考虑到物品数量只有4。
可以先用最多5次bfs求出每个目标点到其他目标点的距离。
然后枚举依次拿取物品的顺序，用next_permutation...


#include 
#include 
#include 
#include 
#include 

using namespace std;]]></description><category></category></item><item><title><![CDATA[Hdu 3962 Microgene (AC自动机+矩阵)]]></title><link>https://blog.youkuaiyun.com/u010709592/article/details/39781693</link><guid>https://blog.youkuaiyun.com/u010709592/article/details/39781693</guid><author>u010709592</author><pubDate>Sat, 04 Oct 2014 19:47:20 +0800</pubDate><description><![CDATA[题目大意：
构造一个串使得有两个以及两个以上的目标串。长度为L的所有串中有多少个这样的串。


思路分析：
用所有的数量减去只有1个和没有目标串的数量就是答案了。
如果数据很小，可以用dp解。dp[i][j][k] 表示长度为i，走到自动机的j，有k个目标串的数量。
转移便是。
if(j->next[d] ->isword) dp[i+1][j->next][1] += dp[i]]]></description><category></category></item><item><title><![CDATA[Hdu 2243 考研路茫茫——单词情结 （AC自动机+矩阵）]]></title><link>https://blog.youkuaiyun.com/u010709592/article/details/39780421</link><guid>https://blog.youkuaiyun.com/u010709592/article/details/39780421</guid><author>u010709592</author><pubDate>Sat, 04 Oct 2014 16:35:12 +0800</pubDate><description><![CDATA[哎哟喂，中文题。。。不说题意了。


首先做过POJ 2778可以知道AC自动机是可以求出长度为L的串中不含病毒串的数量的。
POJ 2778的大概思路就是先用所有给的病毒串建一个AC自动机，然后将AC自动机上所有非单词节点连一个边。
离散数学中有说道，如果矩阵A 中的 [i][j] 表示 i节点通过一条边可以走到j节点的方法数。
那么A*A这个矩阵的[i][j]就表示 i 节点到j ]]></description><category></category></item><item><title><![CDATA[Zoj 3535 Gao the String II (AC自动机+dp)]]></title><link>https://blog.youkuaiyun.com/u010709592/article/details/39755599</link><guid>https://blog.youkuaiyun.com/u010709592/article/details/39755599</guid><author>u010709592</author><pubDate>Fri, 03 Oct 2014 14:48:03 +0800</pubDate><description><![CDATA[题目大意：
用集合A中的串构造出一个串，使之让更多的setB中的串成为他的子串。


思路分析：
和 
Codeforces 86C 差不多。
不过这里是要用A中的构造。
先用A 和 B的串构造一个自动机。然后对于A集合的尾结点给出一个最大后缀匹配，对于B集合的尾结点给一个权值。
dp[i][j][k] 表示已经构造出来了一个长度为i的串，现在走到了自动机的j结点，i长度后面有k]]></description><category></category></item><item><title><![CDATA[Codeforces 86C Genetic engineering  (AC自动机+dp)]]></title><link>https://blog.youkuaiyun.com/u010709592/article/details/39739939</link><guid>https://blog.youkuaiyun.com/u010709592/article/details/39739939</guid><author>u010709592</author><pubDate>Thu, 02 Oct 2014 21:43:19 +0800</pubDate><description><![CDATA[题目大意：
要求构造一个串，使得这个串是由所给的串相连接构成，连接可以有重叠的部分。


思路分析：
首先用所给的串建立自动机，每个单词节点记录当前节点能够达到的最长后缀。
开始的时候想的是dp[i][j]表示长度为i，走到自动机的j节点的答案。
但是显然既然是可以重复覆盖的，那么每一个节点的dp值都并不是最优的，因为可以从一个地方截断去连接另外一个串。
所以正确姿势就是dp [i]]></description><category></category></item><item><title><![CDATA[Hdu 3341 Lost's revenge (ac自动机+dp+hash)]]></title><link>https://blog.youkuaiyun.com/u010709592/article/details/39737447</link><guid>https://blog.youkuaiyun.com/u010709592/article/details/39737447</guid><author>u010709592</author><pubDate>Thu, 02 Oct 2014 17:55:01 +0800</pubDate><description><![CDATA[题目大意：
给出很多个DNA串，每一个串的价值为1，最后给出一个长串，要你重新排列最后的串使之它所有的子串的权值和最大。


思路分析：
最先容易想到的思路就是搜！管她3721。。直接一个字符一个字符的码，然后在AC自动机上判断最后的权值。TLE哟。
然后发现搜过不去，那就dp咯。再容易想到的就是dp[i][a][b][c][d] 表示此时遍历AC自动机的节点在i，然后构成了a个A，b]]></description><category></category></item><item><title><![CDATA[Zoj 3545 Rescue the Rabbit(ac自动机+dp)]]></title><link>https://blog.youkuaiyun.com/u010709592/article/details/39736485</link><guid>https://blog.youkuaiyun.com/u010709592/article/details/39736485</guid><author>u010709592</author><pubDate>Thu, 02 Oct 2014 14:45:31 +0800</pubDate><description><![CDATA[题目大意：
给出的DNA序列有一个权值，请构造一个长度为I的DNA序列使得在这段DNA序列的权值最大。如果为负数就输出噼里啪啦。。。


思路分析：
构造序列就是在ac自动机上走，求最大要用到dp
dp[i][j][k] 表示现在构造到了长度 i 。此时的我们把当前字符放在j节点，并且满足了k状态。k是一个10位的2进制状态压缩。
注意这道题上有坑就是一个序列可能有多个权值。所以不能]]></description><category></category></item><item><title><![CDATA[Hnu 11187 Emoticons :-) （ac自动机+贪心）]]></title><link>https://blog.youkuaiyun.com/u010709592/article/details/39719619</link><guid>https://blog.youkuaiyun.com/u010709592/article/details/39719619</guid><author>u010709592</author><pubDate>Wed, 01 Oct 2014 19:28:02 +0800</pubDate><description><![CDATA[题目大意：
破坏文本串，使之没有没有出现表情，破坏就是用空格替换。问最少需要破坏多少个字符。


思路分析：
初看跟Hdu 2457 没什么区别，其实Hdu2457是要求将字符替换成ACGT，而这个只需要替换成空格。
而空格是在表情串中不曾出现的，所以要破坏的时候就要遍历的指针赋为根节点，继续遍历。。
每一次变成根的时候ans就加一。


#include 
#include ]]></description><category></category></item><item><title><![CDATA[Hdu 2457 DNA repair (ac自动机+dp)]]></title><link>https://blog.youkuaiyun.com/u010709592/article/details/39719123</link><guid>https://blog.youkuaiyun.com/u010709592/article/details/39719123</guid><author>u010709592</author><pubDate>Wed, 01 Oct 2014 18:25:14 +0800</pubDate><description><![CDATA[题目大意：
修改文本串的上的字符，使之不出现上面出现的串。问最少修改多少个。


思路分析：
dp[i][j]表示现在 i 个字符改变成了字典树上的 j 节点。
然后顺着自动机一直转移方程。
注意合法与不合法。


#include 
#include 
#include 
#include 
#define inf 0x3f3f3f3f
using namespace std]]></description><category></category></item><item><title><![CDATA[Hdu 5052 Yaoge’s maximum profit（树链剖分）]]></title><link>https://blog.youkuaiyun.com/u010709592/article/details/39718563</link><guid>https://blog.youkuaiyun.com/u010709592/article/details/39718563</guid><author>u010709592</author><pubDate>Wed, 01 Oct 2014 16:19:44 +0800</pubDate><description><![CDATA[题目大意：
给出一棵树，每个点有商店，每个商店都有一个价格，Yaoge每次从x走到y都可以在一个倒卖商品，从中得取利益，当然，买一顶要在卖之前。但是没次走过一条路，这条路上的所有商品都会增加一个v。
输出每次的最大利益。


思路分析：
很容易想到树链剖分，可是关键在于如何维护这样一个变量，使得每次都要让买的再卖的前面。
维护变量 ltr 和 rtl ，表示从左去右和从右去左。
剖]]></description><category></category></item><item><title><![CDATA[UvaLive 6667 Longest Chain (分治求三维LIS)]]></title><link>https://blog.youkuaiyun.com/u010709592/article/details/39584551</link><guid>https://blog.youkuaiyun.com/u010709592/article/details/39584551</guid><author>u010709592</author><pubDate>Fri, 26 Sep 2014 19:24:02 +0800</pubDate><description><![CDATA[题目大意：
题目给出了定义的小于号，然后求出一个LIS。。。


思路分析：
这道题目的是一个严格递增的，和 Hdu 4742 类似。只不过Hdu的这道题是一个不递减的序列。
简单说一下Hdu 4742的做法。
首先我们可以想到的是一维的LIS，那么简单就是n。
然后二维的LIS，就是先排序一维，然后用求第二维的LIS。
现在问题扩展到三维。依然排序一维。
假设我们排序的是z。]]></description><category></category></item><item><title><![CDATA[Hdu  5030  Rabbit's String （后缀数组）]]></title><link>https://blog.youkuaiyun.com/u010709592/article/details/39553097</link><guid>https://blog.youkuaiyun.com/u010709592/article/details/39553097</guid><author>u010709592</author><pubDate>Thu, 25 Sep 2014 16:22:52 +0800</pubDate><description><![CDATA[题目大意：
要求将一个长串分解成最多k个子串，使得分开的n个串的字典序最大的那一个子串的字典序最小。


思路分析：
要最大的最小，不难想到二分的。
我们二分出原串中的第rk大子串就是目标串。
现在就是怎么判断这个串满足要求，也就是我们如何分其他部分，使之成为字典序最大的一个。
我们可以通过rk轻易的找到这是哪一个串，假设它处在sa[t]中。
那么可以知道 在 sa数组中t以前的]]></description><category></category></item><item><title><![CDATA[Hdu 5032 Always Cook Mushroom (树状数组)]]></title><link>https://blog.youkuaiyun.com/u010709592/article/details/39534741</link><guid>https://blog.youkuaiyun.com/u010709592/article/details/39534741</guid><author>u010709592</author><pubDate>Thu, 25 Sep 2014 00:45:41 +0800</pubDate><description><![CDATA[题目大意：
在一个1000*1000的二维平面上，每一个整点都有一个权值，权值大小是 the production in the grid points (x, y) is (x + A)(y + B) where A, B are two constant. 


思路分析：
先离线处理出所有的询问，对于每一个询问都有一个极角，按照极角排序。
然后对于平面上每一个点，都依次的加入到B]]></description><category></category></item><item><title><![CDATA[Hdu 4699 Editor(Splay)]]></title><link>https://blog.youkuaiyun.com/u010709592/article/details/39523111</link><guid>https://blog.youkuaiyun.com/u010709592/article/details/39523111</guid><author>u010709592</author><pubDate>Wed, 24 Sep 2014 14:55:28 +0800</pubDate><description><![CDATA[题目大意：
给出一个文本编辑器，按照图示的操作进行删减和添加。


思路分析：
对于如何维护左边最大，就要记录每个区间的左边最大，还有这个节点的值，还有子区间的和。
注意看题目，题目的要求输出左边最大是不能为空集的，意味着如果全部都是负数，那么就输出最左边的负数就好。
那么就要解决初始化的问题。
再有一点问题就是会有很多个连续的L ，R操作。所以要判断边界。


#inclu]]></description><category></category></item><item><title><![CDATA[Hdu 4419 Colourful Rectangle(线段树扫描线)]]></title><link>https://blog.youkuaiyun.com/u010709592/article/details/39507931</link><guid>https://blog.youkuaiyun.com/u010709592/article/details/39507931</guid><author>u010709592</author><pubDate>Wed, 24 Sep 2014 00:03:17 +0800</pubDate><description><![CDATA[题目大意：
给出多个不同颜色的矩形，求最后覆盖的颜色的面积。


思路分析：
我是自己手动暴力枚举。
比赛的时候漏了一种情况。
RGB 可以从 RG+RB组合来（只是举例，就是说可以从两种颜色组合而来）。
然后就只需要维护所有的颜色
用扫描线来判断。


#include 
#include 
#include 
#include 
#define MAXN 42222
u]]></description><category></category></item><item><title><![CDATA[Hdu 5029 Relief grain（树链剖分）]]></title><link>https://blog.youkuaiyun.com/u010709592/article/details/39482639</link><guid>https://blog.youkuaiyun.com/u010709592/article/details/39482639</guid><author>u010709592</author><pubDate>Mon, 22 Sep 2014 22:05:55 +0800</pubDate><description><![CDATA[题目大意：
给出一棵树。
然后有m个操作，每个操作都在两点的路径上分配不同的粮食。
最后要求输出所有村庄有的最多的粮食的种类。


思路分析：
一眼就看得出来是树链剖分的题目。
现在的问题就是，每一次操作，如何维护每个点的最多的食物编号，以及最多的食物的数量。要记录这两个值是肯定的。
首先可以想到将所有的操作按照z排序。这样每一回合操作，称一回合为处理同一种颜色。一回合结束之后，]]></description><category></category></item><item><title><![CDATA[hdu 4777 Rabbit Kingdom （离线树状数组）]]></title><link>https://blog.youkuaiyun.com/u010709592/article/details/39108351</link><guid>https://blog.youkuaiyun.com/u010709592/article/details/39108351</guid><author>u010709592</author><pubDate>Sun, 07 Sep 2014 00:32:15 +0800</pubDate><description><![CDATA[题目大意：
给出m个查询，查询出[ l - r] 之间去 这个区间所有的数都互质的数有多少个。


思路分析：
首先我们处理出来每一个位置，左边和右边第一个与之不互质的数的位置。记在pre 和 next下。这个方法用分解质因数就好。
一个区间内的答案，等于这个区间的所有数减去有与之互质数的个数。
现在要统计的就是
1.对于一个给定的查询[l,r] 区间，统计有多少个 i （l
2]]></description><category></category></item></channel></rss>