自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

xiefubao的专栏

业精于勤荒于嬉,行成于思毁于随

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

原创 hdu3709(求区间内平衡数的个数)数位dp

题意:题中平衡数的定义: 以一个位置作为平衡轴,然后左右其他数字本身大小作为重量,到平衡轴的距离作为全职,实现左右平衡(即杠杆原理平衡)。然后为区间[x,y]内平衡数的个数。 (0 ≤ x ≤ y ≤ 1018)解法:数位dp。如果一个数的平衡数,那么它的平衡轴位置是确定的。原来一直尝试数位dp在dfs时候列举平衡轴的位置,后来才意识到可以提前枚举平衡轴位置,然后再dfs,这样比较好写

2014-05-14 17:38:26 1242

原创 hdu3652(数位dp)

题意:求1-n(n解法:数位dp。LL dp[pre][now][have][iflow][rem]记录着第pre位为now,have表示前边是否出现过13,iflow表示dp过程否有降低,rem表示后续需要的余数是多少。代码:/******************************************************* author:xiefubao

2014-05-14 12:09:14 738

原创 hdu3400(三分套三分)

题意:平面上两条线段 AB,CD。 A到B的速度v1 C到D的速度v2 其他地方的速度V3,求A到D的最短时间

2014-05-13 22:22:46 1359

原创 UVALive 6609(Minimal Subarray Length)维护递增序列|RMQ

题意:给一个整数序列(可能有负数),求最短的连续序列使得序列之和大于等于整数x;解法:第一种是On的复杂度:                  我们要的是sum[j]-sum[i]>=x,如果有两个决策j = sum[j'],那么j就是没用的。即维护一个sum[j]递增序列。然后每次可以二分查找,但是这里有个特点就是要得到最近的,可以同时维护一个left指针,left指针用于跟进更

2014-05-13 21:47:43 1322

原创 poj3737(三分搜索)

题意:给出一个圆锥的表面积(侧面积+底面积),求圆锥的最大体积。解法:三分半径。左边界随便取个极小的数,右边界可以假定这个圆锥是平的,高是0.这是底面积的二倍是表面积。代码:/******************************************************* author:xiefubao***************************

2014-05-13 11:02:17 1648

原创 poj2282(数位dp)

题意:计算a-b中各个数字出现的个数;解法:数位dp(思想都是先算1-b的个数,然后减掉1-a中的个数),1-9数字的计算和前边计算1的那一篇数位dp差不多,计算0时候要加一维表示前缀是否全是0;代码:/******************************************************* author:xiefubao*****************

2014-05-12 15:53:40 1313

原创 Codeforces(429D - Tricky Function)最近点对问题

D. Tricky Functiontime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputIahub and Sorin are the best competitive

2014-05-12 13:43:58 1394

原创 数位dp(求1-n中数字1出现的个数)

题意:求1-n的n个数字中1出现的个数。解法:数位dp,dp[pre][now][equa] 记录着第pre位为now,equa表示前边是否有降数字(即后边可不可以随意取,true为没降,true为已降);常规的记忆化搜索代码:/******************************************************* author:xiefubao

2014-05-11 09:24:12 2607

原创 poj1486(二分图删边匹配)

题意:给n(n<=26)张幻灯片,每张上面都有一个数字。给出所有幻灯片的位置和数字的位置,问哪些幻灯片上的数字可以确定。

2014-05-09 19:22:43 939

原创 poj4048(计算几何)

题意:有一个强大的弓弩,可以射穿所有障碍,给n(n解法:离散化所有的墙段点,以出发点为一端和每个墙端为另一端(加长到足够长),然后分别计算和多少线段非严相交。线段非严格相交的判定是:    1、严格相交(叉积判断)    2、点在线段上,这时叉积等于0并且点在线段之间代码:/**************************************************

2014-05-09 14:28:15 689

原创 hdu3336(Count the string)KMP的应用

题意:给一个字符串,计算所有前缀在字符串中出现的次数和。解法:KMP计算出Next数组后,每个位置的Next数组不断往前递归,每次相应前缀次数就加1.代码:/******************************************************* author:xiefubao************************************

2014-05-08 23:30:18 636

原创 lightoj1060(求字符串第k大排列)组合数学

题意:求给定字符串(有重复字符)第k大排列。解法:先判断字符串的所有排列是否够k个。然后从左向右每一位每一位确定。简单的组合数学。代码:/***************************************************** author:xiefubao************************************************

2014-05-08 20:11:52 1181

原创 lightoj1061 (N Queen Again)搜索+状压dp

题意:(八皇后问题的变形)给定8个皇后的位置,然后问最少要走几步使得每个皇后之间可以不相互攻击(不在同一行同一列同一斜线)。其中走的过程每步可以横着竖着斜着走多个格子。解法:先枚举所有合法的八皇后局面(总共92种)。然后将给的点对合法八皇后局面进行匹配。dp[i][j]表示合法八皇后前i个点用掉给定八皇后集合的子集j所花费的最小步数。这里的匹配相当于两个集合各八个点,进行一一配对。原来

2014-05-08 09:41:24 1246

原创 poj3080(Blue Jeans)kmp求多个串公共子串

题意:给出1-10个长度为60的字符串,求出最长的公共子串(长度不能小于3),如果有多个一样长的,输出字典序最短的。解法:想到kmp时,自己第一反应枚举第一个串的所有子串,在其他所有串中走一遍kmp,复杂度为10*60*60*60,但是发现只需枚举第一个串后缀就可以,每次枚举记录在所有串能走最远中走的最短的那个长度。这样复杂度就成了10*60*60,0ms AC。代码:/*****

2014-05-06 14:19:11 919

原创 poj1011(深搜+剪枝)

题意:给m根木棍,将它们重新拼成n根一样长的木棍,并使得n尽量大(即每个新木棍尽量短)。解法:经典的搜索题目。从小到大枚举拼成的新木棍长度,每次枚举进行一次深搜。这题关键是如何剪枝。         1、当枚举的长度不能整除总长度的时候,剪枝;(这个很显然)         2、先将木棍从长到短排序,枚举时先尝试长的木棍。(先枚举长的可以使得搜索深度不至于过深)     

2014-05-06 12:57:45 913

原创 poj3265(Problem Solving) dp

题意:奶牛群有P种问题,每个问题可以在一个月的时间内修复。修复每个问题要付出相应的代价。对于修复第i个问题,修复月开始时候要付出预付Bi,修复完的下个月初要付出Ai。必须按照1-p的顺序修复(可以多个在同一个月修复)。每个月,奶牛们可以产生M的价值,每个月产生的价值只能再下个月使用,不能累计。问最快可以几天完成所有修复。解法:ans[i][j]表示最后一个月(其实是倒数第二个月)修复了

2014-05-04 17:17:57 1140

原创 poj1029(找假硬币)模拟

题意:给n个硬币,其中有一个硬币和其他的硬币重量不一样,给出k次比较重量的结果。问是否可以将假硬币找出来。解法:判断一个硬币是真币的方法(满足其一):         1、这个硬币出现过在=的两边          2、既出现在小于的一边过,也出现在大于的一边过。        如果排除这些硬币后只剩下一个,那么假币就是剩下的那个,否则就是不确定。代码:/*******

2014-05-04 17:08:03 1308

原创 CF(427D-Match & Catch)后缀数组应用

题意:给两个字符串,求一个最短的子串。使得这个子串在两个字符串中出现的次数都等于1.出现的定义为:可以重叠的出现。解法:后缀数组的应用。从小枚举长度。如果一个长度len合法的话:则一定存在这个样的sa[i]排名。sa[i]与s[i+1]的公共前缀长度大于等于len,且sa[i]与[i-1]的公共前缀长度小于len,同时sa[i+1]与[i+2]的公共前缀长度小于len,同时保证sa[i

2014-05-03 21:35:39 1146

原创 poj3254(Corn Fields)状压dp

题意:在n*m(1解法;很经典的状压模型。先将每一行的合法状态求出来,12的时候最多377个合法状态。然后进行与行之间的状态转移。最坏复杂度12*(377^2)代码:/***************************************************** author:xiefubao*********************************

2014-05-03 21:12:04 674

原创 poj3257(Cow Roller Coaster)DP

题意:要连出一个从1-L的过山车线,给出n段可选的建设方案。每段都有起始位置,终止位置,代价,和乐趣程度。要实现1-L的长度中,相邻两端要首尾相连,总建设代价控制在B之内,问最多能获得多少乐趣程度。解法:二维dp, num[i][j]记录恰好建设到i并且用掉代价j多能获得的最多乐趣。先将每段可选方案按照位置排序,然后进行转移。最后选max(num[L][i]),i from 0 to

2014-05-03 20:14:44 1007

原创 hdu4763(KMP的应用)

题意:给一个字符串,问最长的一个子串A,他是前缀,同时是后缀,并且中间也出现过A。并且出现的三个A都不没有重叠部分。解法:先KMP求出失配数组,然后将所有的是后缀且是前缀的打上标记,然后遍历整个next数组,(对于每个位置的next来说,一直next向前取就是找到此前缀的一个个是整个字符串前缀的后缀,比较绕)暴力枚举判断每个串的所有匹配前缀的后缀是否合法。代码:/*****

2014-05-01 22:04:27 1296

原创 poj1692(区间记忆化dp)

题意:上下两行数相连,相等的才可以相连,并且每条线必须且只能与其他一条线相交(要同时满足相交的两条线的数不相等)。问给的两行数最多可以连几条线。解法:ans[i][j]记录着上面i,和下面j下标之后的数中最多可以连多少条,记忆化搜索dfs(0,0)就可以了。搜索时候,如果用到了i,则贪心在下面选相等的。用到j同理。代码:/******************************

2014-05-01 14:22:42 1260

原创 poj2185(二维最小覆盖子串问题-KMP)

题意:给出一个二维的字符矩阵,问最小的可覆盖子矩阵大小。解法:如果是一维的话,在KMP算法的Next数组中,len-Next[len]是一维的覆盖子串,如果len-Next[len]能整除len,则可恰好覆盖(即长度为len-Next[len]的前缀)。           在二维的情况,每行每列求一个最小公倍数就可以了,并且公倍数不能大于本身总长度。代码:/*****

2014-04-23 00:27:19 1125 1

原创 poj(2406)求最短重复子串-KMP

题意:求一个字符串的最短的重复子串;解法:KMP求出Next数组,如果len-Next[len]是len的约数的话,            那么s[len-Next[len]]-s[len-1]就是了,否则重复子串就是母串本身。这个由Next的性质很好推得。代码:/****************************************************

2014-04-22 21:33:45 2284

原创 poj(1226)KMP

题意:给n个字符串,求最长的一个字符串s使得给出的n个字符串中都会出现s或者s的反转。解法:KMP裸题,枚举第一个串的所有子串对其他所有串进行KMP。代码:/***************************************************** author:xiefubao******************************************

2014-04-22 17:52:04 716

原创 poj2482(最多矩形覆盖-线段树)

题意:二维平面上有一些星星,每个星星都有一个亮度值,给一个矩形,矩形两边平行于坐标轴,只能平移不可以旋转,问矩形覆盖面积内的星星的亮度值之和最大是多少?解法:将模型转化为:每个星星都是一个相等大小的矩形的中央。每个星星都是一个矩形,这时候求一个点,使得所有覆盖此点的矩形的亮度值之和最大。   解此模型可以用线段树,先将区间离散化,然后从左向右扫,及时维护和查询。  ps:做题过

2014-04-22 15:18:31 1778

原创 LeetCode按单词反转字符串

//传入一个字符串引用,按单词翻转字符串class Solution{public: void reverseWords(string &s) { vector vec; string str=""; for(int i=0; i<s.size(); i++) { if(s[i]=='

2014-04-22 12:30:39 771

原创 poj3229(图论+状压dp)

题意:n个城市,一些城市之间有铁路或者公交双向相连。一个人要从0号城市出发,游览其中的m个城市,游览第i个城市需要cost[i]的时间,问此人是否能在特定的时间内游览完这m个城市并返回0市,如果可以输出可以最多游览的城市数量(m个城市包括在里面),否则输出"No Solution"。解法:状压dp,首先floyd求出两两城市之间的最短路径。           dp[state][

2014-04-22 12:25:57 1044

原创 hdu2841 (容斥原理递归版)

题意:给整数m,n;(m,n解法:先线性筛素数法筛出100000之内每个数的质因子,然后容斥求1-n中有多少个数和i互质。          dfs(int i,int tool,int rem)表示的意思是:1-tool中含有rem位置之后的i的质因子的数的个数。代码:/****************************************************

2014-04-11 17:45:13 1129

原创 poj3991(括号匹配-贪心)

题意:给一个长度为偶数的括号序列,问至少要改变多少个可以使得此括号序列合法;解法:贪心的思想,遍历过程中如果前缀中有右括号没有匹配那么此右括号一定要变成左括号,如果右括号左边有没有匹配的左括号,则一定可以找左边最近的那个左括号匹配上。最后再加上剩余左括号数量的一半;代码:/***********************************************

2014-04-10 23:58:29 1277

原创 携程编程赛第一场C题(球面最小生成树)

题意:球面上给出n个点的经纬度,求最小生成树总路径长度是否小于给定的一个长度;解法:球面上的最小生成树,关键是有两点的经纬度得到两点的球面距离:          球面距离公式:length=R*acos(cosβ1*cosβ2*cos(α1-α2)+sinβ1*sinβ2),β1,β2分别为纬度,α1,α2分别为经度;代码:/*************************

2014-04-10 23:51:10 747

原创 poj1141(括号匹配-区间dp)

题意:给一个括号序列,问包含此序列的最短合法括号序列;解法:普通的区间dp,num[i][j]记录的是i-j子序列最少需要补充的括号个数,只是在要记录区间的最优分界点rem[i][j]从而将最短合法括号序列输出,复杂度O(n^3);代码:#include #include #include using namespace std;char s[2004];int nu

2014-04-10 23:42:09 774

原创 poj2411(状压dp)

题意:由1*2的纸片组成一个n*m的矩阵(n解法:状压dp,ans[i][j]表示第i行状态为j(状态j表示为1的位向下扩展)有多少种组法。除了第一行和最后一行,都可能会有来自上方或是伸向下放的格子,剩余的格子必须可以由1*2横着铺在本行,legal函数用于判断状态是否合法;最后答案就是最后一行没有伸向下方的组法数量ans[n-1][0].代码:/*************

2014-04-09 23:15:12 1074

原创 poj1948(经典问题-二维背包 求面积最大三角形)

题意:给n(n解法:dp[i][j][k]表示前k个木板是否能够组成两个长度为i,j的组合,当然ij是相互没有重叠部分的。根据三角形的性质知道,i,j都不会大于等于周长的一半,所有取最大800就够了。滚动使用dp[i][j]可以将空间降到二维,为了避免i,j有重复使用同一个木板,从大向小反向dp。代码:/***************************************

2014-04-09 00:48:12 1717

原创 poj2148(二维背包)

题意:有n个奶牛,每个都有一个s和t值,取奶牛的一个子集并在保证s之和与t之和均大于等于0的情况下,求∑(s+t)最大;解法:将二维转化为一维:           对于每个背包,以s为背包重量,t为背包价值,求出所有容量的包大小所能包含的价值。由于s有负值,所以加上100000;最后在背包容量大于等于0且价值大于等于0里面选择大和就好;代码:/************

2014-04-08 17:35:20 1104

原创 poj3171(线段树区间覆盖最小代价)

题意:给n个区间及其代价值,问要覆盖[M,E]区间至少要花费多少代价;解法:线段树维护和查询区间的最小值:           先将所有区间的代价设置为无限大,然后[0,M-1]区间设置为0.将给的n区间按左优先排序,然后进行一趟遍历:第i个区间为[a,b],先查询[a-1,b]区间的最小值min然后更新[a,b]的最小值为Ci+min。最后找到[E,E]区间的最小值就是要覆盖[M

2014-04-08 13:09:29 2012

原创 poj3140(经典-树的dp)

题意:一棵树,每个节点都有一个正的权值,将树剪断一条边,分成两棵树并使得两棵树的权值和之差的绝对值最小。求最小之差。解法:记忆化dfs一遍,即枚举剪断每条边的情况,复杂度是O(n).代码:/***************************************************** author:xiefubao******************************

2014-04-08 01:08:59 998

原创 网络寻路 (dp计数)

题目:X 国的一个网络使用若干条线路连接若干个节点。节点间的通信是双向的。某重要数据包,为了安全起见,必须恰好被转发两次到达目的地。该包可能在任意一个节点产生,我们需要知道该网络中一共有多少种不同的转发路径。源地址和目标地址可以相同,但中间节点必须不同。如下图所示的网络。1 -> 2 -> 3 -> 1 是允许的1 -> 2 -> 1 -> 2

2014-03-20 23:14:45 1092

原创 poj1442 最小路径覆盖

题意:求有向图中,至少要走几条路径才能将所有的点都覆盖到;解法:有向图的最小路径覆盖=节点数-二分图的最大匹配            有向图的二分图是:拆点后,每有a->b的边,就在二分图中将a->b连起来。代码:/***************************************************** author:xiefubao***********

2014-03-20 18:51:52 793

原创 404D Minesweeper 1D(记忆化搜索,dp)

题目链接:http://codeforces.com/problemset/problem/404/D题意:扫雷的游戏,给一串字符,'*'代表此处有地雷,'?'代表未知,'0'代表左右有0个,'1'代表左右有1个,'2'代表左右有2个;为给的字符串共有多少种合法的地雷分步情况;解法:dp;ans[i][pre][now]表示i的位置之前一个位置地雷状态是pre(0/1),i位置地雷

2014-03-20 14:35:39 1036

空空如也

空空如也

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

TA关注的人

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