自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 POJ 3304 Segments

给n条线段,问是否存在一条直线,所有线段在直线上的投影有公共点这个问题等价于:是否存在一条直线,与所有线段都有交点证明思路:首先,如果线段AB在直线L上的投影为A'B',那么A'B'之间的任意点C',过它做L的垂线,与AB必然有交点,同样的,AB之间的任意点C,过它做AB的垂线,与A'B'必然有交点。这个结论可以推广到N条线段,那么如果N条线段在某条直线上的投影有公共点,过这个公共点做这条

2012-01-11 21:20:41 557

原创 POJ 2318 TOYS

问每个凸四边形里有几个点,由于上边和下边是给定的,所以只需要判断每个点和每条cardboard partition的左右关系单调性显然,可以二分来搞,再用叉积判断方向#include#include#include#include#include#include#include#include#include#includeusing namespace std

2012-01-11 21:11:05 514

原创 hdu 3721 uvalive 5026 building roads

首先,我们证明一个结论:树的重心一定在树的直径上树的直径指树上最长的一条路径,树的重心指树上所有点中到其余点最远距离最小的点假设重心u不在直径上,那么它到距它最远点(x)的路径一定会和树的直径有交点v,否则这条路径会是新的直径的一部分,那么v到x的距离一定更小,所以重心一

2011-09-25 20:11:15 1054 1

原创 ZOJ 3535 Gao the String II

搞了半天,预处理各种错。。。先说下题目意思吧,不好理解,当时比赛的时候是以为把得到的S和每个Bi去比,Bi的每一位如果正确对上了就算得1分,结果样例直接没过,就扔掉了后来看了解题报告和标程,发现应该是S和每个Bi去比,当Bi是S的子串时才得1分那么我们可以用自

2011-09-21 20:26:53 1185

原创 ural 1297 Palindrome

求一个串的最长回文子串把原串的反串加个原串后面,中间加个没有出现过的字符然后,原串中,下标i在反串中对应的位置为2*l-i如果求以i为对称轴的回文串,我们求suffix(i)和suffix(2*l-i)的LCP如果求以i和i+1为对称轴的回文串,我们求suff

2011-09-19 21:00:19 814

原创 hdu 3120 dolphin

这个题很不错哦,用到了最短路+二分答案+dfs,出题人太厉害了首先,100个点,总共的点的标号数目可能达到100,压缩不了,那就只能dfs了,但肯定需要剪枝我自己想到的剪枝就是,先不管标号的问题,从终点做一次最短路,记录路径,如果源点不可达,则无解,如果这条路径上的点刚好

2011-09-08 22:43:34 1013

原创 TSP问题

TSP问题最主要的特征,点数一般为16以为,然后每个点只能经过一次,求遍历所有点的最小代价原始的TSP问题是要走一条回路的,即汉密尔顿回路,问题变形的话,可以不回到原点,也可以有多个原点POJ 1699,把每个串看成一个点的话,就是求不指定原点的TSP问题,且不必回到原点

2011-09-05 00:21:05 10655 1

原创 hdu 1024 Max Sum Plus Plus

dp[i][j]表示以第i个数字为第j段的结尾的最大和dp[i][j]=max(dp[i-1][j],dp[k][j-1])+a[i],j-1即要么和第i-1个数连在一起构成第j段,要么自己为新的一段,与之前的j-1段构成j段直接转移是O(n^2*m)的,不过对于dp

2011-08-08 10:24:59 621

原创 POJ 2886 Who Gets the Most Candies?

对于当前要出去的人k,我们可以知道下一个要出去的人是第几大的我的做法:统计编号为k+1到n的人中还剩多少人,记为x,编号为1到k-1的还剩多少人,记为y,以及从k开始要往右数几个人,记为t,如果t还有一种方法是先统计k左边的人数x,记k要往右数y个人,且k走后还剩下n个人

2011-08-05 21:18:49 483

原创 poj 2373 Diving the Path

dp方程为dp[i]=min{dp[j]}+1,2*a直接搞转移是L^2的,但j是在由i确定的一个范围内的,所以可以用单调队列优化另外,这题比较麻烦的是如果i在某头牛的区间内,i处就不能放喷头,我们需要知道哪些地方不能放置,可以对区间先预处理一下,能合并的就合并,然后用一

2011-08-05 16:12:52 842

原创 hdu 2845

先横着扫求出每一行可以得到的最大值然后竖着扫求总共可以得到的最大值,每次考虑该单位选或不选代码:#include#include#include#include#include#include#include#include#include#incl

2011-08-05 12:39:11 530

原创 hdu 2571

简单DP,但需要注意的是起点必须为左上角,所以第一行不能由第0行转移,第一列不能由第0列转移代码:#include#include#include#include#include#include#include#include#include#inclu

2011-08-05 12:37:47 627

原创 hdu 3911 Black and White

经典线段树问题,需要用上懒操作对于每个区间,记录该区间从左端点开始连续的1和0的个数,从右端点开始连续的1和0的个数,整个区间最多的连续1和0的个数,以及这个区间是否被翻转过每次访问子区间时,如果父区间被翻转过,子区间也要被翻转,标记下移,更新完子区间后再向上更新查询

2011-08-04 21:05:23 473

原创 hdu 3893 Drawing Pictures

先在字典树中插入禁止序列11,123456,22,33,44,55,66,654321,然后构造矩阵,快速求幂,累计答案,看出模型的话,就跟POJ2778是一样的题目代码:#include#include#include#include#include#incl

2011-08-03 20:09:59 718

原创 poj 3228 Gold Transportation

我用的二分边长+网络流,这题也可以用枚举边长+并查集来做对于每个有金矿的点,源点向其连一条容量为金矿数的边,对于每个仓库,向汇点连一条容量为仓库储存量的边,然后对于所有边长不大于当前枚举的值的边,连双向的容量为无穷的边如果满流,则该枚举的边长可行,继续缩小,否则,枚举更大

2011-08-01 16:04:19 730

原创 hdu 3474 Necklace

把C看成1,J看成-1,那么问题就转化为,有多少段以i结尾,长度为N,且任意i-n+1sum[i]-sum[j]>=0的区间,由于任意,这n个式子中的最小值也必须满足大于等于0的条件,那么,我们可以对每个i维护一个长度为n的区间内的最大值k,用sum[i]-k来表示sum[i]-

2011-07-31 21:16:06 561

原创 hdu 3415 Max Sum of Max-K-sub-sequence

要求一段连续区间和,可以用sum[i]-sum[j]来求,但要求一段长度不大于k的区间和的最大值,我们可以固定i,然后求sum[i]-min{sum[j]},1我们用单调队列来维护min{sum[j},每次枚举一个i时,队头元素的下标至少为i-k,然后求完sum[i]-m

2011-07-31 19:04:10 442

原创 POJ 1946 Cow Cycling

定义dp[i][j][k]表示第i头牛领头,此时消耗j点能量,走了k圈的最少时间如果此时更换领头的牛,dp[i][k][k]=min{dp[i-1][j][k],dp[i][k][k]}否则,dp[i][j][k]=min{dp[i][j][k],dp[i][j-sqr(

2011-07-31 16:55:55 567

原创 POJ 1160

令dp[i][j]表示第i个post office在第j的村庄时的最小代价dp[i][j]=min{dp[i-1][k]+cost[k+1][j]},i-1dp[1][i]=cost[1][i]一开始不会预处理cost,枚举k后又枚举位置计算cost,跑了400多ms

2011-07-31 13:03:44 635

原创 poj 1351 Number of locks

dp[i][j][k][s]表示当前到第i把锁,高度为j,是否出现高度差为3(k=1表示出现过,0表示没有出现过),使用高度的种数为s的方案数类似于按位DP的思想,记忆化求解dfs的时候枚举第i+1位选择的高度,并和当前s状态比较,记录出现高度的种数代码:#include#in

2011-07-28 21:10:20 1015

原创 POJ 3260 The Fewest Coin

FJ要买价值为V的东西,他又N种货币,第i种的币值为Vi,数量为Ai,老板每种货币都有无数个,求最少需要多少张货币完成交易(FJ付出的加上老板找零用的)先计算FJ付x元最少要几张货币(多重背包),然后计算找y元最少需要几张货币(完全背包),然后枚举x-y=V对应的最小值x和y的上

2011-07-16 19:29:29 630

原创 POJ 3093 Margaritas on the River Walk

给n个物品,容量为V的包,要求这样的方案数:选中k个物品放入背包后,剩下的物品中,任意一个都放不进去考虑什么情况下一个都放不进去,就是剩下物品中体积最小的那个(体积为v)都放不进去,即背包装载容量应为[V-v+1,V]那么我们可以将物品按容量排序,从小到大枚举不放入背包的体积最小

2011-07-15 09:44:29 915 1

原创 hdu 3449 Consumer

每组物品加入了箱子的限制,如果要买改组物品,就必须先买箱子考虑第i组物品时,前i-1组的最优值已经知道,假设总容量为V,改组的箱子的代价为p,那么如果我们要买该组物品,可用容量就只有V-p,所以,我们先用tmp数组记录前i-1阶段容量范围在[p,V]这个范围内的最优值,然后在这个

2011-07-13 16:32:37 1217 1

原创 hdu 1561 The more,The better

树形依赖背包,用多叉转换成二叉的形式解决一个节点两个孩子,左孩子是它的孩子中的第一个,右孩子是它的第一个右兄弟,这样一直递归下去,所以只有左孩子是节点的真正孩子dp[i][j]=max{dp[r[i]][j], dp[l[i][k]] + dp[r[i]][j-1-k] +w[i

2011-07-13 16:27:01 654

原创 hdu 2415 Bribing FIPA

树形DP,不同的是,只要选择一个根节点i,它的子树中的所有节点也被选择,代价为cost[i]由于dfs时,先遍历子树,再返回根节点,这样,以i为根的子树中的节点可能被多次利用,解决办法就是访问到i时,先开一个tmp数组当前的状态,即dp值,然后访问子树,返回时,先更新tmp值,再

2011-07-13 16:22:34 1080

原创 hdu 2639 Bone Collector II

求第k大的背包每个容量v都对应k个不同的价值,当考虑放第i件物品,容量为j时,价值为第k大时,我们要么不放,要么放,那么每个k就对应2个情况,dp[j][k]和dp[j-w[i]][k],总共有2×K种不同价值,那么我们排好序后,取前K大且两两不同的价值,存入dp[j][k]中,

2011-07-13 11:12:08 894

原创 2011 Multi-University Training Contest 1 - Host by HNU

B Cat VS Dog这题HDU上2728貌似是原题,坑爹啊比赛时候还是想了好一会的,后来发现猫和狗的个数都是坑爹的,根本没用,求最多的人满意,我们只要关注人和人的关系就行了如果i和j冲突,即要么i喜欢的是j不喜欢的,要么j喜欢的是i不喜欢的,那么连边i->j,j->i然后求一

2011-07-12 21:15:18 882

原创 hdu 2159 FATE

二维背包,dp[i][j]表示忍耐度为i,且还可以杀j个怪时能获得的最大经验值dp[i][j]=max(dp[i][j],dp[i-r[k]][j-1]+e[k]),r[k]为杀死第k种怪掉的忍耐度,e[k]为第k种怪的经验值注意方程转移时,我们必须要保证考虑第j个阶段时,我们只

2011-07-11 09:56:24 557

原创 Codeforces 78E Evacuation

构图的思路与POJ 2391是一样的,对于从一个初级源点s出发的流,如果可到达的点是受限制的,可以先把这些受限制的点都找出来,拆点拆成i->i',然后,s向i''连边,最后,超级源点S向每个初级源点s连边,每个点i'向汇点连边为什么要这么做?因为既然从s出发的流是受限制的,我们可

2011-07-09 23:23:18 636

原创 ural 1056 computer net

树上每个点都有一个距离它最远的点,题目要求所有最远点中,具有最小最远距离的是哪些点一个点,距离它最远的点,要么通过它的父节点到达,要么通过它的某个孩子节点到达,显然,一遍dfs不能得出结果我们先做一遍dfs,求出某点通过孩子节点最多可以向下走多远,这里我们需要记录最大值和次大值然

2011-07-08 22:34:16 549

原创 POJ 1935 Journey

给你一棵树,要访问树上的m个节点,并且最后不用返回根,所走的最短距离是多少首先,可以把树上不用走到的地方剪掉,那么叶子节点都是要访问的点要访问所有叶子节点,那么新的树上的每一条边都是有用的,并且只有一个叶子节点访问完后不用返回考虑如果最后要返回根,那么就形成了一条欧拉路径,且每条

2011-07-07 19:04:24 831

原创 POJ 2378 Tree Cutting 1655 Blancing Act

2378:给你一棵树,如果把一个点去掉,则这棵树将会被分割成若干块,如果最大的一个连通块中点的个数不大于N/2,则这个点是符合要求的点,求所有符合要求的点而1655则是求一个点,把它去掉后,得到的若干连通块中有个点的个数最大值,这个最大值比任何其他点进行相同操

2011-07-06 18:51:32 753

原创 ural 1018 binary apple tree

给你一棵二叉树,每条边有一个权值,问你保留从根(1)开始的连在一块的Q条边,能获得的最大值是多少先把边上的权值转到点上,N个点N-1条边,即向根连一条虚拟边,权值为0,每条u->v上的权值转到v上dp[i][j]表示以i为根的子树保留j个点的最大收益,这么定义

2011-07-05 22:27:36 658

原创 POJ 2763 Housewife Wind

连通图任意两点间路径唯一,那么肯定是树,不然就会有圈 如果没有动态的修改边权的操作,就是简单的LCA问题了 现在加入动态操作后,如果修改(u,v)这条边,且不妨设u是v的父节点,那么以v为根的子树中所有节点的dis值都会改变我们可以用树状数组来维护这个改变的del值 首先,将LCA转化成RMQ问题,这样我们求得了一个dfs顺序的欧拉序列,和对应的深度序列,还有一个每个节

2011-06-30 10:01:00 972

原创 POJ 1984 Navigation Nightmare

并查集的应用,求解两个点的曼哈顿距离dx记录子节点相对该集合代表的x偏移量,dy记录子节点相对该集合代表的y偏移量 更新的时候注意相对偏移量的转移即可,并且find操作时更新dx,dy对于边a->b,将find(a)的父节点指向b,那么就可以在下次find操作时更新a原来集合中的点的dx,dy值 代码:#include#include#include#inc

2011-06-28 22:57:00 432

原创 hdu 1060 Leftmost Digit

 设x=n^n,则log10(x)=a+b(a>0,0那么x=10^b*10^a,其中,10^b  同理,最左边的k位都是可以求的把10^b不断乘以10,直到满足要求为止 代码:#include#include#include#include#include#include#include#include#include#incl

2011-06-12 21:00:00 377

原创 HDU 3507 Print Artical

斜率优化

2011-06-01 00:37:00 517

原创 POJ 1260 Pearls

一维dp,理解题目限制的意义

2011-05-20 12:55:00 705

原创 01背包问题小结

01背包问题

2011-05-12 21:12:00 1359 2

原创 POJ 2192 Zipper

LCS问题变形

2011-05-09 18:52:00 449

空空如也

空空如也

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

TA关注的人

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