自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 PKU3254 corn fields

       这是一道基于状态压缩的动态规划,但应该是这类题中最简单的了。       我们按行递推,将每行的状态用二进制表示出来。这就要求我们进行预处理,记录每个状态上一行的可行状态。这样的动态规划时间复杂度极低。program corn_field;const pnum=1000000000; maxn=12; maxm=12;type pointer=^node; node=record data:long

2010-10-31 18:27:00 421

原创 PKU3269 build a new barn

<br />首先我们了解到本题在一维情况时就是著名的士兵排队。当然由于汉密尔顿距离的定义,我们依旧可以如法炮制!<br />         但是我通过无数次WA法相这道题里有一些细节值得考虑。首先,题目描述中没有是要求选择点不是提供的n个点之一,最开始看反了,囧了……其次,我们求出符合的点后发现会出现ans=0的情况。所以我们还要讨论求出的部分的边界上某个点的四周。     <br /> <br /> program Building_A_New_Barn;const deltax:arr

2010-10-30 16:15:00 313

原创 PKU1201 intervals

<br />       这是一道差分约束的图论题目,涉及到SPFA算法。<br />       首先,来了解一下所谓差分约束系统。如果我们有一系列的Ax<=b的约束条件,我们就可以通过建立约束图,寻找最短路或最长路得方法来求解这类问题。对于一个约束条件x[j]-x[i]<=k,那么我们就需要连接一条从i到j权值为k的边。我们一旦得出了一条最短路径就是一个可行解,出现了负权回路就是没有可行解。如果我们有一个可行解,那么在这组可行解的每个数据上加上相同的数,也是一个可行解。<br />       这样,对

2010-10-29 09:11:00 410

原创 PKU2823 sliding window

       这是一道经典的数据结构题,可以用来为多种数据结构入门或者热身。它涉及到的数据结构有单调队列、堆结构、线段树。后两项应该是大家比较熟悉的,所以今天做讲解的是单调队列。       我们以最小值的情况为例。对于两个元素a[i]和a[j],我们假设i       根据均摊思想,单调队列的时间复杂度为O(n),应该是最优的。       具体比对请见代码!【单调队列】program sliding_window;var nummax,nummin,quemax,quemin,ansmax,

2010-10-24 13:38:00 906

原创 PKU1180 Batch Scheduling

<br />       如果说想在这道题目上拿部分分(如果有这么一说)是很简单的。但是O(n)满分算法可不是一下就搞出来的。<br />       这道题需要用到斜率优化。下面就用这道题举个例子吧!<br />       首先我们列出本题的状态转移方程。对于这个方法我们需要倒推这个方程。(但是即使正推也有能AC的低复杂度算法)<br />f[i]=f[j]+cost[i]*(s+time[i]-time[j])<br />       我来解释一下:f[i]表示从第i个开始的最小代价,cost[i]和

2010-10-21 18:37:00 402

原创 PKU1703 find them catch them

<br />         简单的并查集,但是我少打了个句号,于是无数次WA……<br />         并查集里的比较常见的题型,就是记录一个根节点和一个对立根节点。<br /><br />program Find_them_Catch_them;var father,pair:array[0..100000] of longint; n,m,i,t:longint;procedure prework;var i:longint;begin rea

2010-10-06 12:30:00 308

原创 SPOJ0196 musketeers

         经典的线性动态规划,但是状态转移并不难。         用g表示相互的胜负关系,用f表示是否可以相遇,那么当推出f[i , i+n] 时,就说明,i可以获胜。状态转移方程为f[i,j]:=f[i,k] and f[k,j] and (g[i,k] or g[j,k])。program musketeers;var f,g:array[0..200,0..200] of boolean; ans:array[0..200] of longint; i,t,sum

2010-10-06 12:23:00 306

原创 RQNOJ520 trade

         NOIP2009第三题也。         这道题我觉得可以用所圈加拓扑排序吧?尽管我没有尝试……我发现这种两次SPFA是很好的思路。对于这种标号修改型的数据来说基本都可以用SPFA来解决,代码也很短小。         总体思路在下面的代码中很清晰——更新从1开始的路径上的购买时的最小值,再更新以n结束的路径上的卖出时的最大值,它们的差值的最大值就是我们的答案!program trade;type rec=record u,v:longint;

2010-10-06 09:04:00 339

原创 PKU1167 the buses

<br />         这是我印象中敲的第一个dfs-id吧……弱弱地撒花……<br />         题目大家都清楚,我觉得在中国是个信息学的书上都有……注意搜索顺序!头脑中有一棵搜索树的话,就不难发现,如果搜索当前车属于原有线路还是新线路,随着树深的增加,枝条就越多,剪枝的效果就越好!<br />         迭代加深就是比普通的深度优先搜索多了几行代码而已,用于限制树的深度。而且得到的第一个可行解就是最优解!在状态空间比较庞大,或不便于记录时,可以用它代替广度优先搜索!<br /><br

2010-10-04 18:30:00 386

原创 RQNOJ521 sudoku

<br /><br />         这是noip2009 的第四题,也是一道让我心痛不已的题目……<br />         拿到题目发现这显然是一到搜索,这不难看出。可能有人用dancing links 来解这道题,我认为这确实是正解,但不得不承认dancing links是一种比较高级的数据结构了,并非那么轻易就掌握的。<br />         既然如此,单纯的但富有有技巧的搜索能不能解决这个问题呢?答案是肯定的!我今天的这个代码用到了位运算判重——这是可以过掉80%的测试数据的。如果注意搜

2010-10-04 15:50:00 335

原创 PKU1128 frame stacking

    拓扑排序,没啥好说的,直接代码之!    program Frame_Stacking;var data:array[0..30,0..30] of char; ans:array[0..30] of char; map:array['A'..'Z','A'..'Z'] of boolean; up,down,left,right,into:array['A'..'Z'] of longint; vis,use:array['A'..'Z'] of boo

2010-10-03 14:54:00 363

空空如也

空空如也

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

TA关注的人

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