自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AC自动机的初步学习 hdu2222 AC自动机入门题

本来KMP和trie树就不太熟悉,但是就是想弄明白AC自动机是什么东东,所以就找了一些博客学习了一下,用hdu2222练了一下手。推荐几篇很好的博客:http://www.cppblog.com/menjitianya/archive/2014/07/10/207604.html这篇博客绝对是良心之作,尤其是那些图片,可以很好地讲述AC自动机的失败指针和trie图构造。还有几篇不错

2016-02-29 23:12:56 601

原创 UVa 11732 strcmp函数 trie树 左儿子右兄弟表示法

题意:给出n个字符串, 计算两两比较的次数. 每次比较都需要比较(str1[i] == str2[i])和 (str1[i]== '\0'各一次).分析:边插入边统计,这样就刚好是两两比较一次的结果。如果先建树再深搜,那么就多比较了一次,/2就可以。#include#includetypedef long long ll;const int N=4000*1000+10;

2016-02-29 10:02:57 517

原创 LA 3942 背单词 trie树+dp

题目:题意:给定一个字符串和给定一个单词集合。问从给定单词集合中选取单词,有多少种选取方法刚好拼接成字符串。例如:abcd4abcdab有两种a-b-cdab-cd分析:刘汝佳书上入门经典的题目,看了他的模板敲了下,不错,我原先是用链表来存储的,以后就按这种形式了。对于这题,要求的是有多少种方法,一看就是dp,其中d(i)表示从字符i开始

2016-02-28 21:22:51 571

原创 poj 3630 找重复前缀 trie树

题目:点击打开链接题意:给你一些电话号码,如果其中一个电话号码是另一个电话号码的前缀,那么输出NO,否则YES分析:这题就是找最小前缀问题,以前我都是用string然后排序,然后取相等的一段判断就行。今天主要是学习一下trie树。如果是动态节点的话,会TLE,只能初始化数组,但是别忘了一开始trie数组清0.思路是在建树的时候,在单词的最后一个节点标记一些结尾,然后查询

2016-02-28 17:49:14 861

原创 hdu 1075 翻译火星文 trie树 / map

题目:点击打开链接题意:给你一段火星文对应的英文,再给你几句火星话,让你翻译成英文。分析:先把火星文建成一颗字典树,在翻译的时候,查找每个单词块,看是否这个串在字典树中能否找到,因为在建树的时候id存储了对应单词的英文,所以查找的时候返回id就可以,找不到就返回-1. 对于这题,如果简单的做做,可以用map,很简单。#include#include#includeusing

2016-02-28 13:59:18 391

原创 hdu 1247 trie树入门题

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1247题意:给你一些单词,输出是由两个其他的单词组成的单词。分析:trie树的入门题,很简单,这题的数据很水,每个单词的长度不会超过26.#include#include#includeusing namespace std;const int N=50005;char word[N]

2016-02-28 11:08:38 96

原创 hdu1693 Eat the Trees 插头DP

题目:点击打开链接题意:一个棋盘上有0,1.需要找一些回路把1全部串起来,问总方法数分析:插头dp第一题,果然有点难度,用了我一天的时间,还是自己太菜了。。。。我是看了这个图才恍然大悟的,这就对应下面的三种可以联通的情况。对于为什么 f[i][0][s可参考文档:http://www.docin.com/p-741918386.html图片来

2016-02-27 22:06:35 328

原创 poj 2411 骨牌覆盖问题 状压dp

题目:点击打开链接题意:用1*2 的矩形通过组合拼成大矩形,求拼成指定的大矩形有几种拼法分析:这题的关键在于什么状态是合法的,可以这样想,用1表示有骨牌覆盖,用0表示空着。在覆盖第i行的时候,那么如果覆盖的状态是合法的,覆盖完后第i-1行必须没有空格了(全是1111),所以可以看出,每一行的状态必须要有偶数个1相连,为什么?由于在做第i行dp时必须完全覆盖第i-1行,只

2016-02-27 00:04:25 1842

原创 zoj 3471 Most Powerful 状压dp(简单)

题目:点击打开链接题意:有n种原子,原子i和j相撞,如果j消失,会产生能量a[i][j],如果i消失,会产生a[j][i]能量,问产生的最大能量。分析:这题很简单,本没必要写,但这是我第一道独立做出来的状压dp题,于是写出来了。f[i]表示状态是i的最大能量,i是一个二进制数,1表示原子还存,0表示已经消失了,所以状态转移就明显了f[s]=min{ f[s-{j} ] }.

2016-02-26 20:09:04 297

原创 poj 2288 哈密顿路 状压dp

题目:http://poj.org/problem?id=2288题意:给出了n个地点和m座桥(连接顶点的),画出哈密尔顿圈并求出最大值,他们的最大值由三部分决定,1:n个地点的value值之和,2:顶点之间连接之积,3:三个(连续的)顶点之积;要求输出最大值,并且存在最大值的情况总数,同时,对于两个完全逆向的路径可以认为是同一条路径;分析:发现每个点的状态由前面两个点确定,用DP(S

2016-02-26 17:36:08 370

原创 hdu 3001 Travelling 状压dp TSP变形

题目:点击打开链接题意:给定n 个城市已经 m 条路 以及对应路费c,要求遍历所有城市最少的路费,每个城市不能超过2次分析:要求每个点最多走两边,不是只可以走一次,所以要用三进制的状态压缩解决这个问题。可以预处理每个状态的第k位是什么。状态的表示 f[st][i],表示现在在i点,状态是st的最短路程。那么状态转移显而易见:f[st][i]=min( f[{st}-i][j]+

2016-02-26 15:20:27 301

原创 几道数学问题 (未完成)

知识点:判断三角形是否为非退化三角形。方法:判断三点是否在一条直线上,看斜率。但不能直接求斜率,会有精度损失而且还要分情况处理。解决如下:bool ok(point a,point b,point c){ return (a.y-b.y)*(c.x-b.x)==(c.y-b.y)*(a.x-b.x);}如果ok函数放回true,表示三点共线,否则可以构成三角形例题:Code

2016-02-26 11:04:40 383

原创 TSP问题 动态规划实现

货郎担问题(TSP)。有n个城市,两两之间均有路直接连接,求一条经过每个城市一次且仅一次,最后返回起点的最短路线。这是刘汝佳书上的一道题,他给出了思路,我实现了一下。用动态规划解决,可以假设从0点出发,然后回到0点。那么用 f(i,S)表示现在处在i点,要去访问剩余的在集合S中的点,集合S可以用二进制数st。那么状态转移方程就是:f(i,S)=min{d(j,S-{j})+dist

2016-02-25 20:33:10 3723

原创 poj 3311 送披萨 状压dp

题木:点击打开链接题意:位于0点小伙计给n个点送披萨,每个点可以经过多次,问送完n个点回到0的最短路程。类似于TSP问题,不过TSP每个点只可以经过一次。分析:对于这题,因为一个点可以经过多次,所以可以预处理两个点的最短距离,这个距离可以经过多次。处理完之后,就好办了,可以枚举n个点的全排列,找出最小的就好,比较简单。对于这题,当然也可以用dp,状态的表示 f[st][i]

2016-02-25 16:33:02 450

原创 poj 1185 炮兵阵地 状压dp

题目:点击打开链接题意:如图,大炮可以放在p处,黑色区域是可以攻击的范围,问怎么放大炮可以不会误伤,求出最大数?分析:和上一篇poj3254一样,这是这题多加了一个判断,就是还要考虑上上行的情况,其实跟上一题差不多,具体参考代码。【状态表示】dp[i][j][k] 表示第i行状态为k,第i-1状态为j时的最大炮兵个数。 【状态转移方程】dp[i][k][t] =

2016-02-25 09:50:30 261

原创 poj 3254 Corn Fields 状压dp入门题

题目:点击打开链接题意:一个矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相邻的方格不能同时放牛,即牛与牛不能相邻。问有多少种放牛方案(一头牛都不放也是一种方案)分析:状压dp的入门题,这题就是把每一行等效成一个数,由于是由01表示的,所以很容易想到整行用一个二进制来等价,因为1表示可以选,0表示不可以选,那么这

2016-02-24 19:48:02 378

原创 Codeforces 629C - Famil Door and Brackets dp

题目:629C - Famil Door and Brackets题意:给出长度为m的含有()的字符串s,要求在s的前面和后面各加上一个字符串p,q(可以是空串),构成长度为n的合法串。分析:合法串就是对于任意位置的括号前缀和大于等于0,且最后的前缀和为0。枚举这个字符串前面p字符串的长度,可以使得p字符串的前缀和大于等于字符串s的最小前缀和minn,那么p+s就符合前缀和

2016-02-24 13:33:58 296

原创 Codeforces 629D - Babaei and Birthday Cake 线段树

题目:629D - Babaei and Birthday Cake 题意:给你1-n个圆柱体,要求从1-n,选择一些体积逐渐增大的圆柱体,使得所选的圆柱体体积之和最大。分析:看到这题,n的数据范围1e5,感觉会超时,于是很快用n^2的dp敲完,超时。。。O(n^2)的状态转移方程:dp[i]表示到i圆柱体最大的体积和if(val[i]>val[j]){dp[i]=max(dp

2016-02-23 22:10:06 381

原创 hdu 1828 Picture 线段树 矩形周长并

题目:点击打开链接题意:矩形周长并思路:与面积不同的地方是还要记录竖的边有几个(numseg记录),并且当边界重合的时候需要合并(用lbd和rbd表示边界来辅助)线段树操作:update:区间增减 query:直接取根节点的值#include#include#includeusing namespace std;#define lson l,m,rt<<1#defin

2016-02-23 14:20:48 507

原创 hdu 1542 Atlantis 线段树矩形面积并+离散化

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1542题意:给一些矩形,可能会有重叠,求总的矩形面积我是看了胡浩的那篇文章,学习一下。思路:浮点数先要离散化;然后把矩形分成两条边,上边和下边,对横轴建树,然后从下到上扫描上去,用cnt表示该区间下边比上边多几个,sum代表该区间内被覆盖的线段的长度总和这里线段树的一个结点并非是线段的一

2016-02-23 10:48:20 464 3

原创 hdu 3667 线段树区间合并

题目:点击打开链接题意:有一个线段,从1到n,下面m个操作,操作分两个类型,以1开头的是查询操作,以2开头的是更新操作1 w  表示在总区间内查询一个长度为w的可用区间,并且要最靠左,能找到的话返回这个区间的左端点并占用了这个区间,找不到返回0 好像n=10 , 1 3 查到的最左的长度为3的可用区间就是[1,3],返回1,并且该区间被占用了2 a len , 表示从单位a开始

2016-02-22 17:21:18 385

原创 hdu 5631 并查集判联通

题目:点击打开链接题意:问题描述众所周知,萌萌哒六花不擅长数学,所以勇太给了她一些数学问题做练习,其中有一道是这样的:给出一张 nnn 个点 n+1n+1n+1 条边的无向图,你可以选择一些边(至少一条)删除。现在勇太想知道有多少种方案使得删除之后图依然联通。当然,这个问题对于萌萌哒六花来说实在是太难了,你可以帮帮她吗?输入描述第一行一个整数表示数据组数 T

2016-02-21 09:44:15 602

原创 poj 2096 概率dp

题目:点击打开链接题意:一个软件有s个子系统,会产生n种bug。     某人一天发现一个bug,这个bug属于某种bug,发生在某个子系统中。     求找到所有的n种bug,且每个子系统都找到bug,这样所要的天数的期望。     需要注意的是:bug的数量是无穷大的,所以发现一个bug,出现在某个子系统的概率是1/s,     属于某种类型的概率是1/n。 分

2016-02-20 18:43:38 284

原创 hdu 4405 飞行棋 概率dp

题目:点击打开链接题意:跳棋有0~n个格子,每个格子X可以摇一次色子,色子有六面p(1=分析:f[i]表示从i点到n+点的期望,易见f[n]=0,比如n=3,m=0所列方程为e[0]=1/6e[1]+1/6e[2]+1/6e[3]+1                  e[1]=1/6e[2]+1/6e[3]+1                  e[2]=1/6e

2016-02-20 16:50:11 633

原创 hdu 4734 数位dp

题目:点击打开链接题意:给一个数A (十进制表示形式为AnAn-1An-2 ... A2A1,定义函数 F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1,给一个B,求B以内的i,满足F(i)分析:f[i][j]表示i位比j小的数有多少,先计算出F(a),然后dfs,找出比fa小的B以内的数,找B以内的数,这就是简单的数

2016-02-20 13:43:14 67

原创 hdu 3652 B-number 数位dp

题目:点击打开链接题意:求小于n,是13的倍数且含有'13'的数的个数。n《1e9分析:看了别人的才写出来,点击打开链接,因为要两个要求,不含13且不是13的倍数,这样的话,可是可以用三维数组表示状态f[i][j][k],铁打不变的是i表示数位,然后增加上用j表示余数,k表示是否含有13。然后dfs,从高位开始以此判断每一位的状态,#include#include#includ

2016-02-20 10:14:32 295

原创 hdu 2089 不要62 数位dp

题目:题意:给定一个区间[a,b],问在这个区间中的数字,不包含4和62的数有多少个?分析:数据范围小于1e6,如果暴力的话,再加上分解因数,预处理的时间复杂度数量级最大1e7,查询O(1)。这题主要是学习一下数位dp。暴力:#include#includeusing namespace std;typedef long long ll;const int N=100000

2016-02-19 21:08:18 273

原创 按位求和问题 数位计数

看了高逸涵 写的那篇《数位计数问题解法研究》,照着他给的代码,学习一下。例一、按位求和问题1 题目大意:  给定 A,B(1代码:#include#includeusing namespace std;typedef long long ll;ll getsum1(int n,int k) //此函数是求n位之内的k进制的数位之和。{ ll B=1;

2016-02-19 17:26:32 2707

原创 对《浅谈数位类统计问题》的学习

学习了一下数位这类问题,看了这篇论文,不错,把代码敲了一下,没有注册账号验证一下,仅供参考。论文:点击打开链接【例题 1】Amount of degrees (ural 1057) 题目大意: 求给定区间[X,Y]中满足下列条件的整数个数:这个数恰好等于K 个互不相等的 B 的整 数次幂之和。例如,设 X=15,Y=20,K=2,B=2,则有且仅有下列三个数满足题意: 17 = 2

2016-02-19 14:18:40 549

原创 Codeforces 626D 暴力

题目:点击打开链接题意:A和B玩小球,一共玩了三局,前两局A胜,第三局B胜,问最后B的得分总和大于A的可能性。#include#include#include#include#includeusing namespace std;typedef long long ll;int a[2009];int n;const int N=10000+10;ll d

2016-02-18 18:01:54 321

原创 Codeforces 626C 简单题

题意:求出2的倍数n个,3的倍数m个,但是每个数只能出现一次,也就是说,6的倍数只能出现一次,问最后出现的最大的数?分析:这题很简单,关键就是怎么判断6的倍数只用了一次,我的思路是先找出全部把n和m各自都选上,求出6的倍数重叠的个数num,然后依次在n和m的尾端判断,放在n的尾端还是放在m的尾端需要的砖块数少,就放在哪个尾端,其中需要判断一下尾端这个数是否被使用过,如果使用过就看下一个。

2016-02-18 16:08:51 661

原创 zoj 3627 贪心模拟

题目:点击打开链接题意:有n个城市排列在一条线上,两个人刚开始处在p位置,每到一个城市可以获得这个城市的财宝,但是需要一天。他们一共有t天时间可以行动,但是他们之间的距离不能超过m,求最大获得财富。分析:若想获得最大财富,那么这两个人刚开始必须分头走,一直走到相距m,如果还有时间的话,那就要同时往左,或者同时往右走,一直走到头,如果还有时间的话,那么再返回,看看是否还能走到另一边获

2016-02-18 10:13:47 358

原创 poj 1155 树形dp+分组背包

题目:点击打开链接题意:有一个电视台要用电视网络转播节目。这种电视网络是一树,树的节点为中转站或者用户。树节点的编号为1~N,其中1为总站,2~(N-M)为中转站,(总站和中转站统称为转发站)N-M+1~N为用户,电视节目从一个地方传到另一个地方都要费用,同时每一个用户愿意出相应的钱来付电视节目。现在的问题是,在电视台不亏本的前提下,要你求最多允许有多少个用户可以看到电视节目。输入:

2016-02-17 22:33:19 278

原创 zoj 3626 树形dp

题目:点击打开链接题意:有n个城镇,他们之间有路相通,知道每条路需要走的天数,每个城镇的价值,现在一个人想要从k点出发,在m天内去访问别的城镇,但是必须在m天之前返回k点,求可以获得的最大价值dp[i][j]表示从i点出发走j天获得的最大价值,需要往返,注意m/=2即可状态转移方程dp[u][j]=max(dp[u][j],dp[u][j-k-w[u][v]]+dp[v][

2016-02-17 18:47:55 255

原创 hdu 1712 裸分组背包

题意:有n门课程,有个人有m天时间去学习,每门课程学习不同的天数会有不同的价值,问最大价值?分析:这是一道十分裸的分组背包题。以下是背包九讲的文段,我刚开始做用的是二维,其实一维就够了。这个问题变成了每组物品有若干种策略:是选择本组的某一件,还是一件都不选 。 也就是说设 f[k][v]表示前 k 组物品花费费用 v 能取得的最大权值,则有:f[k][v]=max{f[k-1]

2016-02-16 15:30:48 333

原创 UVA 1218 完美服务 树形dp

题意:有n台计算机形成树形结构,要求在其中一些做服务器,使得每台不是服务器的计算机恰好和一台服务器相连,求服务器的最少数量。分析:不看题解的话,不会做。。。f[u][0]:表示u是服务器,则每个子节点可以是服务器也可以不是服务器  状态转移方程是:f[u][0]=sum{ min(f[v][0],f[v][1]) }+1;f[u][1]:表示u不是服务器,但u的父亲是服务器,那

2016-02-15 12:42:03 264

原创 poj 1655 求树的重心

题目:点击打开链接题意:有n-1条边链接n个点形成树形结构,问删除哪个点使得,形成的最大连通分量节点数最少,如有多解,输出字典序最小的分析:和poj3107那题一样,求树的重心,dfs一次,从叶子到根转移,求出每个点的子树的最大连通分量,再和父节点所在一侧的连通分量比较,取最大的一个,再看是否比其他点形成的连通分量节点数大,就这样,把重心点放到一个数组中,排序后,取第一个。#inc

2016-02-15 09:05:50 370

原创 poj 2378 简单树形dp

题目:http://poj.org/problem?id=2378题意:有n个谷仓有n-1条路连接,问最少删除哪几个点才能使得删除点后得到的连通图的加点数不大于n/2.分析:求树的重心的变形题,poj3107的简单版,一遍dfs从叶子到根转移找出找到以每个节点为根的子树的结点数,f[u]={ f[v1]+f[v2]+.....+f[vn] }+1;使得每棵子树节点数小于n/2,并且父节点得

2016-02-14 19:06:04 410

原创 poj 3107 Godfather 求树的重心

题目:点击打开链接题意:黑手党有n个人,关系相当于一棵n个节点的树,去掉某个节点后,树被分成很多块,使得分出来的块中最大连通块节点数最小,这个节点便是Goldfather,Goldfather可能有多个,升序输出。分析:其实这是一道求树的重心的问题,对于一颗n结点的无根树,找到一个点,使得把树变成以该节点为根的有根数时,最大子树的节点数最小。也就是说,删除这个点后最大连通块的节点数最小

2016-02-14 15:50:50 371

原创 hdu 5626 Clarke and points 最大曼哈顿距离

题目:点击打开链接题意:给n(分析:这题和poj2926那题一样。|xi−xj|+|yi−yj|,拆绝对值可以得到:正正:xi−xj+yi−yj=(xi+yi)−(xj+yj)负负:−xi+xj−yi+yj=(−xi−yi)−(−xj−yj)正负:xi−xj−yi+yj=(xi−yi)−(xj−yj)负正:−xi+xj+yi−yj=(−xi+yi)−

2016-02-14 15:06:49 840

空空如也

空空如也

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

TA关注的人

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