自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 hdu5475 An easy problem(线段树+单点更新+区间求积)

hdu5475题目给你n个操作,初始时有个1,每次操作给一个数u,操作1表示乘以u并输出结果,操作2表示除以第u的操作乘的数。不仅如此,要输出的是取余结果。思路想当年。。,想暴力,但取余是没有除法的,如果一个个乘再取余会超时,应该用线段树,存的就是每次操作乘的数,如果1操作就简单的加入,如果2操作就把第u次操作变成1,最后询问区间的乘积再取余。。。代码#include<iostream>#incl

2016-08-31 20:16:35 371

原创 poj3304 Segments(计算几何+直线相交)

poj3304题目给你许多的线段,问存不存在一条直线使得所有线段在直线上的映射有至少一个交点。思路http://blog.sina.com.cn/s/blog_6635898a0100n2lv.html 要想到枚举两两端点,注意题目说的重点的存在。代码#include<iostream>#include<cstdio>#include<cstring>#include<cmath>using

2016-08-30 16:09:36 261

原创 poj2318 TOYS(计算几何+叉积+二分)

poj2318题目就是给了一个矩形,给了几条竖线分割,有m个点,问m个点的分布。思路用叉积来判断点在线的左边还是右边,(貌似小于零是在左边),然后就是用二分了。代码#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=5010;struct Point{ int x,y

2016-08-30 15:24:48 240

原创 hdu5534 Partial Tree(dp)

hdu5534题目就是给你n个点,要连n-1条边形成一棵树,最后有个cool值,cool值是所有节点的f值的和,f值与节点的度数有关,具体f1~fn-1事先都已经给出。思路不用考虑图上的东西,从度考虑,每个点至少1个度,总共2n-2个度,所以要分派n-2个度,dp[i]表示分配了i个度时的最大值。转移方程中的i-1的原因是已经分配掉了一个度,实际增加的是i-1度。注意f2~fn-1要减去f1。代码#

2016-08-30 10:39:34 279

原创 计蒜客 百度地图的实时路况 (floyd+二分)

计蒜客 百度地图的实时路况题目中文题意思路如果枚举不走的点,那么会是n^4,会超时,在知道floyd的前提下,我们可以二分那个不走的点。就例如有1234四个点,我们先二分后一半得出经过34松弛的矩阵,然后再得出经过234优化的矩阵,这样不走1的结果就出来了,再回溯递归另一半134的矩阵,不走2的答案就出来了,再回溯得出12的矩阵,再递归124得出3,再回溯12,递归123,4的答案就出来了,实在不行

2016-08-29 20:18:53 609

原创 hdu5023 A Corrupt Mayor's Performance Art(线段树+区间更新)

hdu5023题目P :A到B区间图上第C种颜色; Q:A到B所有点存在的颜色种类;思路因为只有30种颜色,可以用位运算进行状态压缩,线段树就是区间更新,区间查询。代码#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#define lson l, m , rt << 1#define rso

2016-08-28 22:08:47 409

原创 hdu5489 Removed Interval(dp+线段树)

hud5489题目就是说给你一个序列,要删去连续L个字符,问删去后最长的LIS 是多少。思路http://blog.csdn.net/lwt36/article/details/48774103 我感觉是一道好题目,既复习了LIS又复习了线段树。f[i]:=以a[i]结尾的LIS的最大长度g[i]:=以a[i]开头的LIS的最大长度,那么结果就是dp[i]=maxv[i]+g[i],其中maxv[

2016-08-28 08:02:14 445

原创 hdu3586 Information Disturbing(树形dp)

hdu3586题目就是给你一棵树,1节点是指挥部,叶子节点是前线士兵,每条边除去有代价,但代价的总和要小于上限m,现要让指挥部和叶子节点失去联系,要使删去的边中最大的最小,问这个最小值是多少。思路首先要想到这是一个二分判定性问题,二分上限值,用树形dp进行可行性判断dp[i]表示选i节点花费的最小代价的总和,dp[i]要么加上和子节点相连的那条边,或者是子节点的dp,注意子节点要赋成inf,且wa的

2016-08-26 16:49:40 451

原创 hdu4276 The Ghost Blows Light(树型dp)

hdu4276题目就是有一棵树,每个节点有财宝,每条边有花费时间,限定时间T内,从1出发,最后要到N,问最多拿到的财宝是多少。思路首先求出1到n的最短路,在递归的过程中记录花费的时间并且将路径上的边权改成0。之后判断花费时间于T的大小,小的话就进行一次树形dp,dp[i][j]表示从i出发花费j时间最后得到的最多价值,因为1到n的路径只会走一次,而且我们已经把它改成0了,所以一定会走到,其他的点我们

2016-08-26 10:48:41 302

原创 hdu4118 Holiday's Accommodation(树形dp)

hdu4118题目给你一棵树,树的边有边权,每个节点代表一个人,每个人都要到另一个人的家里且两个人不能同时在一个点,且走的路是最短的路,问走的最多路程的情况的路程是多少。思路这道题着眼点不能放到点上,我们要看边,对于一条边,两端有点经过它,考虑点比较少的那一端,经过这条边的点数最多就是少的那端乘以2(出来多少就进去多少,且要根据少的那端的容量),为了让这条边利用最大化,我们就让结果加上2*少的点数*

2016-08-25 17:16:06 464

原创 hdu3401 Trade(单调队列优化dp)

hdu3401题目知道之后n天的股票买卖价格(api,bpi),以及每天股票买卖数量上限(asi,bsi),问他最多能赚多少钱。开始时有无限本金,要求任两次交易需要间隔W天以上,即第i天交易,第i+w+1天才能再交易。同时他任意时刻最多只能拥有maxp的股票思路单调队列优化的例题。 http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950

2016-08-25 10:27:43 429

原创 hdu4679 Terrorist’s destroy(树形dp)

hdu4679题目就是给你一棵树,每条边有边权值,去掉这条边花费他的边权代价,然后树会分成两个子树,求两个个子树的最长链的最大值和去掉边的代价的乘积的最小值,输出那条边。思路做了一些树型dp,还是感觉学习了是什么鬼。。。 http://blog.csdn.net/yang_7_46/article/details/9988655 这位博主讲得很好了。 首先是学习了找树的最长链,两遍dfs,然后预

2016-08-25 10:13:10 402

原创 hdu4714 Tree2cycle(树形dp)

hdu4714题目给你一棵树,删去或者添加一条边花费的代价都是1,问最小的花费是多少使得经过删边加边后树变成一个环。思路还是云里雾里的,只知道最终每个节点的度数是2,那么当它的分支大于等于2的时候一定要删边,有删边就一定有对应的增边,对于根节点,我们要保留两个度,所以是son-2(son是子节点个数),其他的在保留2的同时要把对父的删去,是son-2+1,最后除了son*2之外,还要加一条边,所以加

2016-08-24 15:38:59 568

原创 hdu1059 Dividing(多重背包)

hdu1059题目http://acm.split.hdu.edu.cn/showproblem.php?pid=1059思路http://www.cnblogs.com/kuangbin/archive/2012/05/10/2493602.html (对自己说:很奇怪,这题用刚刚的思路就不对了,总之先记一下,以价值记价值)代码#include<iostream>#include<cstring

2016-08-23 17:59:23 377

原创 hdu1171 Big Event in HDU(多重背包)

hdu1171题目就是给你物品的价值以及数量,这些物品要分两家,要是两家分得的价值尽可能的接近,求两家的价值。思路设两家分别是va和vb,且va>=vb,那么所求就是min(va-vb),也就是min(sum-2*vb),也就是求max(vb)并且vb<=sum/2。接下来就是多重背包了。代码#include<iostream>#include<cstring>#include<cstdio>

2016-08-23 17:02:45 259

原创 hdu4352 XHXJ's LIS(数位dp+状压)

hdu4352题目某个数字如果把它看成序列,每一位的LIS个数是k,就是我们要找的,现在求给定范围内的这种数字的个数思路一开始以为只要记最大位以及长度即可,果然还是太傻太天真,正解是利用nlogn的思想,将每个数字是否出现进行状态压缩,对于枚举的新的一位x,将第一个比这个数字大的数字消去改成这个数,也就是(s^(1<代码#include <iostream>#include <cstdio>#i

2016-08-23 16:22:11 289

原创 hdu5000 Clone(dp+规律)

hdu5000题目就是说一些人,每个人有一些能力值,如果某个人在每个能力值上都不比另一个人少,那么另一个人就不能和他同存,现给你能力的个数以及每种能力的上限,问最多有多少人可以同存。思路关键还是思路,对于能力值总和相同的人来说,他们是一定能够共存的,因为此消彼长,我这方面强在另一方面就比他弱。然后就是猜了(貌似有证明),在能力值总和为总能力值总和sum的一半的时候,人数最多,也就是像对于方程t1+t

2016-08-23 16:11:15 326

原创 hdu3507 Print Article(斜率优化dp)

hdu3507题目大概题意就是要输出N个数字a[N],输出的时候可以连续连续的输出,每连续输出一串,它的费用是 “这串数字和的平方加上一个常数M”。思路http://www.cnblogs.com/ka200812/archive/2012/08/03/2621345.html 这位博主已经说的很好了。 就是在写递推公式的时候,可以化成g[i,j]代码#include<iostream>

2016-08-23 15:44:06 702

原创 hdu3709 Balanced Number(数位dp)

hdu3709题目有一种数字,以某一位为支点,把它看成杠杠,如果平衡的话就是平衡数,如4139,以3为支点4*2+1=9,现给定区间求平衡数的个数。思路记录支点pov以及当前力矩l,调用函数时枚举pov,算l时用(len-pov)*i,这样当l<0时就没必要算下去了,算是个剪枝,其他就是数位dp了。代码#include<iostream>#include<cstring>#include<cst

2016-08-23 15:35:50 202

原创 poj1655 Balancing Act(树形dp)

poj1655题目就是给你一棵树,删掉某个点后形成的森林中节点最多的森林的节点数就是那个点的balance,现求给定树的最小balance及其编号。思路一遍dfs,累加一下每个节点的子节点数,在记录的同时更新最大balence值,最后要考虑一下父节点的情况,也就是n-num[u]即可。代码#include <iostream>#include <cstdio>#include <cstdlib>

2016-08-23 15:25:07 194

原创 hdu4734 F(x)(数位dp)

hdu4734题目给了F(x) = An * 2n-1 + An-1 * 2n-2 + … + A2 * 2 + A1 * 1,现给出A,B求0~B之间有多少数字的F小于F(A)思路就是数位dp,记一位状态sum表示要小于的F值,然后一位位向下推,sum一次次的减。。。代码#include<iostream>#include<cstring>#include<cstdio>#include<v

2016-08-20 11:06:51 269

原创 hdu5445 Food Problem(背包)

hdu5445题目就是要获得一定量的能量,通过食物,食物有数量以及体积,然后用车子装食物,车子有花费和数量,求在目标能量下的最小花费。思路首先就是要写两次背包,第一次求出最小体积,第二次球最小花费,还有就是题目给出最大花费不超过50000,要围绕这个,别的姿势可能会超。代码#include<iostream>#include<cstring>#include<cstdio>#include<v

2016-08-20 10:59:36 270

原创 hdu5001 Walk (概率dp)

hdu5001题目给你一个图,告诉你走多少步,每一个点作为起点的可能性是相同的,走某一个点的概率也是相同的,问所有走法中不仅过某一个点的概率是多少。思路就是个套着概率外皮的dp,dp[i][j]表示走i步走到j的概率,最后结果就是1减去所有到这点的可能性。设了一个0点连向每一个点,表示随机选某个起点,那么总步数就会是d+1步了。代码#include <cstdio>#include <algori

2016-08-20 10:07:20 380

原创 hdu4514 湫湫系列故事——设计风景线(并查集+树形dp)

hdu4514题目首先给你一个图,边有边权,如果能构成一个环就输出yes,否则在森林中找一条最长链。思路判断环就用并查集,找最长链就用树形dp,(对于每一个点,访问它的一个子节点,就用这个点的当前最大子链和这个子节点更新结果,再更新这个点的最大子链),一开始题意理解错了,总之也算是懂了最长链的求法233。(边貌似要开的大点,用c++交……)代码#include <cstdio>#include <

2016-08-20 09:58:08 418

原创 uva10328 Coin Toss(dp)

uva10328题目就是说抛硬币正面为H,反面为T,问抛n次的所有可能情况中连续H的个数至少为k的个数。思路首先要反一下思路,dp[i][j]记录的是抛i次硬币,连续H的个数不超过j的个数,最后答案就是dp[n][n]-dp[n][k-1],对于dp[i][j]怎么求,首先dp[i][j]=2*dp[i-1][j],相当于强行加上正反面,但是有超过j的情况要排除,如果i-1==j那就减一,不赘述。如

2016-08-17 15:35:14 742

原创 hdu4832 Chess(dp+组合数)

hud4832题目中文题目思路http://blog.csdn.net/xuelanghu407/article/details/48370843 这位博主讲的很清楚了。代码#include<iostream>#include<cstring>#include<cstdio>#include<vector>#include<stack>#include<cstdlib>#include

2016-08-17 08:59:05 252

原创 CodeForces - 429B Working out(dp)

CodeForces - 429B题目就是说有有一个人从矩阵左上角到右下角,只能向右向下走,有一个人从左下角到右上角,只能向右向上走,获得路过处的价值,期间两个人要在一个且仅一个地方碰头,不获得那个地方的价值。问两个人获得价值最大值。思路想到从四个角进行dp就不难了,dp就是递推,然后枚举碰头的点,注意碰头的点不能在边界(可以想想),关键是从四个角dp的思路很巧妙。代码#include<iostre

2016-08-16 16:37:48 334

原创 hdu4833 Best Financing(dp)

hdu4833题目中文题目思路还是很菜啊,首先点很多所以要离散化,其次还是思路上的问题吧,获得的每一笔钱之间是互相没有关系的,我们只要考虑把它进行哪几次投资以获得最大的rate,然后加起来就行了,对于最大的rate,将时间连成一张有向图,根据时间序以及产品给的起止时间,然后就类似数塔进行dp即可。代码#include<iostream>#include<cstring>#include<cstd

2016-08-16 12:08:24 356

原创 hdu4123 Bob’s Race(树形dp+rmq)

hdu4123题目就是给你一棵树,首先要求出每个点到其他某个点的价值的最大值,然后选取连续的点,使他们之间最大值最小值的差值不能小于询问q,问这样连续的点最多有多少个。思路前一个求最大值和hdu2196相同,而后的区间询问可以用rmq来处理,同时利用单调性,如果例如2~4超过了q,那么2~5肯定也超过了q,可以直接从3开始判断了,也就是尺取法,还有就是log很慢,需要预处理一下log结果。代码#in

2016-08-16 09:31:28 354

原创 poj3252 Round Numbers(数位dp)

poj3252题目就是求指定范围内转换成二进制0的数目大于等于一的数目的数的个数。思路dp[pos][no][nz],pos表示第几位,no表示零的个数,nz表示1的个数,转移的时候我多加了一个first判断有没有前导零,分了情况讨论。代码#include<iostream>#include<cstring>#include<cstdio>#include<vector>#include<q

2016-08-13 23:46:51 281

原创 hdu3555 Bomb(数位dp)

hdu3555题目求给定n以下的含连续49的数字的个数。思路设置一个pre表示有没有4,在dfs中转移的时候9要用到,貌似要考虑0的问题。代码#include<iostream>#include<cstring>#include<cstdio>#include<vector>#include<queue>#include<algorithm>#include<stack>using na

2016-08-13 20:54:05 224

原创 hdu2089 不要62(数位dp)

hdu2089题目求给定范围内没有4,没有连着的62的数字数目。思路有了dfs套路再做这道题就很简单了23333,按照题意填空就可以了233.代码#include<iostream>#include<cstring>#include<cstdio>#include<vector>#include<queue>#include<algorithm>#include<stack>using

2016-08-13 20:46:06 211

原创 CodeForces 55D Beautiful numbers(数位dp)

CodeForces 55D题目求给定区间内的能被自己的每一非零位整除的数的个数思路http://www.cnblogs.com/algorithms/archive/2012/09/02/2668021.html dp[pos][mod][lcm],pos表示当前位,mod表示对2520取模,lcm表示位数的最小公倍数,离散化,取2520等处理优化的很好。代码#include<iostream

2016-08-13 20:39:32 798 1

原创 poj3368 Frequent values(rmq)

poj3368题目给一个非严格递增的序列,求某个区间段出现频率次数最多数的频率数思路强行rmq,因为是按从小到大给的,在读入的时候可以把当前位的值给成当前数字出现了几次,但仅仅这样会有问题,像-1 -1 1 1时,询问2~3区间时结果是2,所以我开了个right数组,倒着遍历了一边,把每一个值赋成当前数字结束位的序号,在对于每一个询问,我先把L~right(L)处理掉(也就是min(R,right[

2016-08-13 20:03:53 415

原创 poj3264 Balanced Lineup(RMQ)

poj3264题目有一堆牛,牛有身高,求一个区间里最高牛和最低牛身高之差。思路很裸的题,可做模版。代码#include <cstdio>#include <cstdlib>#include <algorithm>#include <cmath>#include <cstring>using namespace std;int mmin[50010][20];int mmax[50010]

2016-08-13 16:14:19 168

原创 hdu3183 A Magic Lamp(RMQ)

hdu3183题目给你一个数字,要求删除m位使得最后的数字最小。思路本来是想找rmq的例题,结果这道题的思路更加的灵性,简而言之反过来说,我们要k=n-m位,那我们可以从最后倒着保留k-1位,从cnt(当前的开始)到倒着的第k位都是我们可以选的,用rmq选取最小的,然后cnt=选的+1,k–,重复即可,关键就是这个选取的区间,很霸道,毕竟数字高位的决定权更大。代码#include <cstdio>

2016-08-13 11:32:06 231

原创 hdu1520 Anniversary party(树型dp)

hdu1520题目有一棵树,每个点有活跃值,告诉你树的结构,选点,有直接父子关系的不能选,求最大的活跃值。思路很套路的树型dp,不赘述。代码#include <iostream>#include <cstdlib>#include <cstdio>#include <vector>#include <cstring>using namespace std;vector<int> edges

2016-08-12 10:49:40 253

原创 hdu1131 Count the Trees(卡特兰数)

hdu1131题目给定n,用1-n构建二叉树,求有多少种 思路点的不同就是n!的排列,树的种类就是卡特兰数了,可以去多了解一下卡特兰数。代码#include <iostream>#include <cstdlib>#include <cstdio>#include <vector>#include <cstring>using namespace std;int katelan[102][1

2016-08-12 10:38:10 505

原创 hdu2846 Repository(Tire树)

hdu2846题目Tire树的应用,像abc就要插入abc,bc,c,然后询问前缀。思路把每个串的每个后缀都插入,但这样会出现问题,如aaa,插入的时候aa,a也会插入,询问a的时候就会重复计数,所以我们要改一下,设个id标记记录最后插入的是谁,下一次插入如果一样就不计数了。代码#include<cstdio>#include<cstring>#include<iostream>using na

2016-08-12 10:23:42 204

原创 hdu5325 Crazy Bobo(建图,搜索)

hdu5325题目Bob有一棵树,上面有点,点有权值,求最大的点的集合,他们联通且将点按照权值升序排序后,序列中相邻点的路径上的任意一点都要比起点小。思路转换成有向图进行搜索,根据点的权值建图,小的点指向大的点,在图上寻找能经过最多点的点。大的点总是作为某段序列的图上的终点,保证排序后当他们是起点时经过的点肯定比他们小。代码#include <iostream>#include <cstdlib

2016-08-12 10:01:31 235

空空如也

空空如也

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

TA关注的人

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