自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 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 571

原创 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 456

原创 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 584

原创 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 649

原创 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 1053

原创 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 642

原创 POJ 3093 Margaritas on the River Walk

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

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

原创 hdu 3449 Consumer

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

2011-07-13 16:32:37 1229 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 666

原创 hdu 2415 Bribing FIPA

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

2011-07-13 16:22:34 1121

原创 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 908

原创 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 898

原创 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 566

原创 Codeforces 78E Evacuation

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

2011-07-09 23:23:18 652

原创 ural 1056 computer net

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

2011-07-08 22:34:16 561

原创 POJ 1935 Journey

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

2011-07-07 19:04:24 849

原创 POJ 2378 Tree Cutting 1655 Blancing Act

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

2011-07-06 18:51:32 765

原创 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 671

空空如也

空空如也

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

TA关注的人

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