MY*****

2011年10月20日

poj 2112

摘要: 分析:二分图多重匹配。这个东西是第一次遇到,一直以为多重匹配之类的只能用最大流去解决(这个应该是最大流的基本功能),其实稍微修改一下匈牙利算法就可以了。把next设置成边表类型的,往里头放点,超过limit之后再进行find(next[i,k])进行增广。思路非常简单,二分答案判定即可。代码:var b:array[0..250,0..15] of longint; v:array[0..250] of boolean; a:array[0..250,0..250] of longint; i,j,k,m,n,limit,l,r,mid,ans:longint;function fin... 阅读全文

posted @ 2011-10-20 07:54 reflec94 阅读(232) 评论(0) 推荐(0) 编辑

poj 3460 bookstore

摘要: 分析:第二道IDA*题目。那个估价函数确实不好想,不过做了这道题目之后应该对IDA*的应用范围有了更为明确地了解。IDA*应用于搜索树的深度比较小,但是每一层扩展出来的节点呈指数增长,这样的话BFS空间上受不了,DFS时间上受不了。于是想到用迭代加深搜索,即ID搜索。但是普通的ID搜索并不能快很多,于是有了IDA*搜索。这当中最难的就是A*中的估价函数的设计,这一点需要充分利用题目中的条件,保证估价函数小于等于实际最优值,而且要尽量接近最优值。这样的话会快很多。代码:type arr=array[0..15] of integer;var a,b:arr; i,j,k,n,t,step,... 阅读全文

posted @ 2011-10-20 07:54 reflec94 阅读(321) 评论(0) 推荐(0) 编辑

poj 1077 eight

摘要: 分析:经典的八数码问题,这里用的是heap+A*。A*很明显是用那个经典的A*,heap的维护和k短路非常像。第二个简单A*代码(模仿某人的):const nx:array[1..9] of integer=(1,1,1,2,2,2,3,3,3); ny:array[1..9] of integer=(1,2,3,1,2,3,1,2,3); ji:array[0..9] of longint=(1,1,2,6,24,120,720,5040,40320,362880);type arr=array[1..9] of integer;var q:array[0..10000] of i... 阅读全文

posted @ 2011-10-20 07:53 reflec94 阅读(256) 评论(0) 推荐(0) 编辑

poj 1190 noi99 生日蛋糕

摘要: 分析:经典剪枝。我的稍微加了点剪枝的搜索连10000,3,这个数据都出不来结果,主要原因在于剪枝减去的太少了,而且从小到大搜索剪枝效果非常不好。后来参考了一下一个c++程序,非常快,16ms。首先根据V=H*R*R,S=2*H*R可知2*V/S等于面积,这一面积是可能的最小面积。加上这个剪枝后非常快。代码1:var ans,maxh,maxr,n,m:longint;procedure dfs(v,h,r,deep,s:longint);var maxhh,maxvv,i,j:longint;begin if v<r*r*h*(m-deep+1) then exit; if v<0 阅读全文

posted @ 2011-10-20 07:52 reflec94 阅读(411) 评论(0) 推荐(0) 编辑

poj 2044 weather forcast

摘要: 分析:非常好的记忆化搜索题目。非常经典的地方就是巧妙地记录了是否有地方连续7天没有下雨,直接用四个顶点表示是否有没有下雨的地方,用一个六维的数组进行判重,并且用到了位运算和二进制进行状态表示。非常好。代码:const nx:array[1..9] of integer=(0,-1,-2,0,0,1,2,0,0); ny:array[1..9] of integer=(0,0,0,-1,-2,0,0,1,2);type ji=record a,b,c,d:longint;end;var d:array[0..366] of longint; i,j,k,n:longint; now... 阅读全文

posted @ 2011-10-20 07:52 reflec94 阅读(292) 评论(0) 推荐(0) 编辑

poj 3322 Bloxorz I

摘要: 基础的BFS题目,但是发现自己好久没有做过搜索题了,这道题做的很不爽,尤其是方向常量的处理,完全抄袭了他人的。代码:const nx:array[0..2,1..4] of integer=((1,-2,0,0),(1,-1,0,0),(0,0,-1,2)); ny:array[0..2,1..4] of integer=((0,0,1,-2),(0,0,-1,2),(1,-1,0,0)); ns:array[0..2,1..4] of integer=((2,2,1,1),(1,1,0,0),(2,2,0,0));type ji=record x,y,s,w:longint;end... 阅读全文

posted @ 2011-10-20 07:51 reflec94 阅读(216) 评论(0) 推荐(0) 编辑

poj 2688 Cleaning Robot

摘要: 分析:状态压缩的BFS或者dfs状态+最短路。前者就是类似于拯救大兵瑞恩的方法,后者非常经典,dfs全排列枚举然后根据最短路相加。WA三次+TLE一次+AC。代码:const nx:array[1..4] of integer=(0,0,1,-1); ny:array[1..4] of integer=(1,-1,0,0);type ji=record x,y,s,step:longint;end;var v:array[0..1027,0..24,0..24] of boolean; q:array[0..1000000] of ji; b:array[0..25,0..25]... 阅读全文

posted @ 2011-10-20 07:50 reflec94 阅读(255) 评论(0) 推荐(0) 编辑

poj 2676 soduku

摘要: 分析:直接dfs即可,没什么。只不过从1,1开始搜时间是1000++,从n,n开始搜时间是16ms。差距。所以最好的办法就是随机搜索。poj上另外的两个soduku就不是简单的搜索能通过的了,3074的很多数据单个都不能很快出结果,对3076更慢,只能用dancing links来优化或者彻底改变搜索方式+加上强剪枝。代码:var z,h,l:array[1..9,1..9] of boolean; a:array[1..9,1..9] of integer; b:array[1..9,1..9] of integer; t,i,j,k:longint; ch:char; vv:b... 阅读全文

posted @ 2011-10-20 07:50 reflec94 阅读(296) 评论(0) 推荐(0) 编辑

poj 3709 K-Anonymous Sequence

摘要: 终于把最后一道优化DP的题目做了,斜率优化之前掌握的不是非常熟练呀。朴素方程:f[i]=min{f[k]+s[i]-s[k]-a[k+1]*(i-k)}。就这么一个朴素方程的化简,搞了很久。把减号写成加号导致化简完全错误,纠结于直接用double还是用int64的x和y,后来有纠结于≤和≥的问题。这才完全搞定斜率优化。不错的题目。代码:var q,f,s,a:array[0..500002] of int64; head,tail,n,m,i,j,t:longint; k,xx,yy,zz:int64;function y(k,j:longint):int64;begin exit(f... 阅读全文

posted @ 2011-10-20 07:49 reflec94 阅读(254) 评论(0) 推荐(0) 编辑

poj 3017 cut the sequence

摘要: 分析:不好理解,大体上知道了优化的方向,但是需要单调队列和平衡树(或堆)来维护。比较难以理解。f[i]=min{f[k]+max{a[k+1],.....,a[i]}}.n2的枚举没有问题,优化势在必行。我们另A[I,J]表示i到j的最大值,那么如果A[i+1,j]=A[i+2,j],那么f[i]+A[i+1,j]<f[i+1]+A[i+2,j],所以很显然f[i]=min{f[k]+A[k+1,i]}有用的K值都是满足某段区间的最大值。如果用单调队列维护a[i]使队列中的元素a值单调递减,那么显然可以用于更新的就是a[q[i]]+f[q[i-1]],但是与其他题目不同的是队首元素并不是 阅读全文

posted @ 2011-10-20 07:49 reflec94 阅读(435) 评论(1) 推荐(0) 编辑

poj 1180 IOI202 经典DP任务安排

摘要: 朴素方程:f[i,j]=min{f[k,j-1]+(tx[i]-tx[j])*(t[i]+j*s)} ①非常经典和常用的优化就是根据每一次启动和分段对后面产生影响,可以优化为: f[i]=min{f[k]+(t[i]-t[j]+s)*(tx[i]-tx[k])+s*(tx[n]-tx[i])} ②而更进一步可以写成更方便的一个方程:f[i]=min{f[k]+(tx[n]-tx[k])*(s+t[i]-t[k])} ③这个似乎更能充分的应用对后面的影响这一特点。根据③这个方程,我们可以进行更强大的优化:斜率优化。为了... 阅读全文

posted @ 2011-10-20 07:48 reflec94 阅读(373) 评论(0) 推荐(0) 编辑

poj 1821 fence

摘要: 朴素的也不好写: for i:=0 to n do f[i,0]:=0; for i:=1 to n do begin for j:=1 to a[i].s-1 do f[i,j]:=max(f[i-1,j],f[i,j-1]); for j:=a[i].s to a[i].s+a[i].l-1 do begin if j>l then break; f[i,j]:=max(f[i,j-1],f[i-1,j]); for k:=0 to a[i].s do ... 阅读全文

posted @ 2011-10-20 07:47 reflec94 阅读(272) 评论(0) 推荐(0) 编辑

poj 2823 window

摘要: 分析:经典的队列应用,实现N的最大最小查找。var a,q:array[0..1000000] of longint; i,j,head,tail,n,m:longint;begin readln(n,m); for i:=1 to n do read(a[i]); head:=1; tail:=1; q[1]:=1; for i:=2 to m-1 do begin while (head<=tail)and(a[q[tail]]>=a[i]) do dec(tail); inc(tail); q[tail]:=i; end; for ... 阅读全文

posted @ 2011-10-20 07:46 reflec94 阅读(966) 评论(0) 推荐(0) 编辑

SCOI2010 股票交易

摘要: 分析:非常好的动态规划题目,优化的思路来源于提取公因式后充分应用方程的关系,省去一维的枚举过程。type ji=record w,s:longint;end;var q:array[0..2005] of ji; f:array[-2000..2000,0..2000] of longint; x,i,j,k,head,tail,t,maxp,w,api,bpi,asi,bsi:longint;function max(x,y:longint):longint;begin if x>y then exit(x); exit(y);end;begin readln(t,maxp,... 阅读全文

posted @ 2011-10-20 07:45 reflec94 阅读(354) 评论(0) 推荐(0) 编辑

2011年5月5日

tyvj P1039 忠诚2——线段树实现动态查询区间极值

摘要: 本来想给出一个链接,tyvjp1039忠诚2,大家自己找一下吧。这个问题很明显是区间极值问题,而且是动态的,这样就不能用RMQ了。线段树是一个比较好的选择。而且我发现一个问题,从前以为线段树之类的东西代码比较死,基本上都一样,其实我错了,越是高级的数据结构写法往往越活,变通性很强。只可惜此生无缘noi啦,这能自己虐一些简单的题目找找爽啦!悲剧呀! 1 type 2 ji=^rec; 3 rec=record 4 l,r,min:longint; 5 lson,rson:ji; 6 end; 7 8 var 9 a:ji;10 b:array[0..100000] of longint;11 . 阅读全文

posted @ 2011-05-05 17:31 reflec94 阅读(499) 评论(1) 推荐(0) 编辑

tyvj 1491 类似于poj matrix

摘要: 描述 Description给定一个长度为N的序列,起始时所有数都为0.以后有2种操作:1:对于操作1,读入两个数x,y,表示从x到y把对应的序列上的数都做取反操作。即,该位置是0,操作以后为1;该位置是1,操作以后是0。2:对于操作2,读入一个数x,输出当前序列中x位置上的数字。对于两种操作,共有p次。输入格式 Input Format第一行,一个数N;第二行,一个数p;以后p行,每行第一个数表示操作k,k=1或2;对于k=1,读入两个数x,y;对于k=2,读入一个数x。输出格式 Output Format对于每一个操作2,输出一行,一个数为所求。 这道题目与poj的matrix一题其实是. 阅读全文

posted @ 2011-05-05 17:09 reflec94 阅读(980) 评论(0) 推荐(0) 编辑

2011年4月26日

ZJOI2006 物流运输 trans

摘要: [ZJOI2006]物流运输transTime Limit:10 SecMemory Limit:162 MBSubmit:540Solved:212[Submit][Status][Discuss]Description物流公司要把一批货物从码头A运到码头B。由于货物量比较大,需要n天才能运完。货物运输过程中一般要转停好几个码头。物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪。由于各种因素的存在,有的时候某个码头会无法装卸货物。这时候就必须修改运输路线,让货物能够按时到达目的地。但是修改路线是一件十分麻烦的事情,会带来额外的成本。因此物流公司希望能够订一个n天的 阅读全文

posted @ 2011-04-26 21:12 reflec94 阅读(695) 评论(0) 推荐(0) 编辑

2011年4月25日

[JSOI2008]最小生成树计数

摘要: [JSOI2008]最小生成树计数Time Limit:1 SecMemory Limit:162 MBSubmit:408Solved:159[Submit][Status][Discuss]Description现在给出了一个简单无向加权图。你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树。(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的)。由于不同的最小生成树可能很多,所以你只需要输出方案数对31011的模就可以了。Input第一行包含两个数,n和m,其中1<=n<=100; 1<=m<=1000; 表示该无向图的节 阅读全文

posted @ 2011-04-25 18:14 reflec94 阅读(3243) 评论(3) 推荐(1) 编辑

2011年4月23日

BJOI[beijing]2006 狼抓兔子

摘要: [BeiJing2006]狼抓兔子Time Limit:15 SecMemory Limit:162 MBSubmit:1787Solved:405[Submit][Status][Discuss]Description现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形:左上角点为(1,1),右下角点为(N,M)(上图中N=4,M=5).有以下三种类型的道路 1:(x,y)<==>(x+1,y) 2:(x,y)<==>(x,y+1) 3 阅读全文

posted @ 2011-04-23 17:54 reflec94 阅读(1820) 评论(2) 推荐(1) 编辑

2011年4月7日

poj 2352 stars_线段树基础

摘要: StarsTime Limit:1000MSMemory Limit:65536KTotal Submissions:16362Accepted:7064DescriptionAstronomers often examine star maps where stars are represented by points on a plane and each star has Cartesian coordinates. Let the level of a star be an amount of the stars that are not higher and not to the r 阅读全文

posted @ 2011-04-07 17:16 reflec94 阅读(641) 评论(0) 推荐(0) 编辑

2011年3月31日

poj 1273 最大流基础

摘要: Drainage DitchesTime Limit:1000MSMemory Limit:10000KTotal Submissions:28561Accepted:10432DescriptionEvery time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This means that the clover is covered by water for awhile and takes quite a long time to regrow. 阅读全文

posted @ 2011-03-31 18:10 reflec94 阅读(397) 评论(0) 推荐(0) 编辑

2011年3月18日

rqnoj 愚蠢的矿工

摘要: 题目描述背景Stupid 家族得知在HYC家的后花园里的中央花坛处,向北走3步,向西走3步,再向北走3步,向东走3步,再向北走6步,向东走3步,向南走12步,再向西走2步( - -||)就能找到宝藏的入口,而且宝藏都是藏在山里的,必须挖出来,于是Stupid家族派狗狗带领矿工队去挖宝藏.(HYC家的宝藏被狗狗挖走后有什么感想?)描述这个宝藏的制造者为了掩盖世人耳目,他做的宝藏是没有出口,只有入口,不少建造宝藏的人都死在里面.现在知道宝藏总共有N个分岔口,在分岔口处是有财宝的,每个宝藏点都有一个财富值.狗狗只带了M个人来,而且为了安全起见,在每个分岔口,必须至少留一个人下来,这个留下来的人可以挖 阅读全文

posted @ 2011-03-18 18:22 reflec94 阅读(479) 评论(0) 推荐(0) 编辑

ranoj p090 未出现的子串

摘要: 题目:未出现的子串题目描述[说明]此题中的子数字串,数字并不一定连续出现在母数字串中.比如我们定义13是串153的一个子串,但35不是153的一个子串.串153的所有子串为:153155313153共7个.[题目描述]有一个长度为n的数字串,其中会出现数字1,2,3,...,q(5<=q<=9).SubRaY遇到的问题是,需要求出一个长度最小的串(出现的数字也是1..q),使得该串不是这个数字串的子串.为了简化问题,你只需要输出这个串的长度即可.例如对于数字串S=135241352222341532(q=5)长度为1和2的数字子串全出现过,但是你找不出子串S'=444.因此 阅读全文

posted @ 2011-03-18 17:42 reflec94 阅读(1535) 评论(0) 推荐(1) 编辑

2011年1月22日

poj 2777 ——线段树基础

摘要: Count ColorTime Limit: 1000MSMemory Limit: 65536KTotal Submissions: 16872Accepted: 4839DescriptionChosen Problem Solving and Program design as an optional course, you are required to solve all kinds of problems. Here, we get a new problem. There is a very long board with length L centimeter, L is a 阅读全文

posted @ 2011-01-22 18:15 reflec94 阅读(1488) 评论(1) 推荐(1) 编辑

poj3468 A Simple Problem with Integers——线段树的应用

摘要: A Simple Problem with IntegersTime Limit:5000MSMemory Limit:131072KTotal Submissions:16883Accepted:4349Case Time Limit:2000MSDescriptionYou haveNintegers,A1,A2, ... ,AN. You need to deal with two kinds of operations. One type of operation is to add some given number to each number in a given interva 阅读全文

posted @ 2011-01-22 18:06 reflec94 阅读(426) 评论(0) 推荐(0) 编辑

NOI2004 郁闷的出纳税——SBT应用

摘要: 【问题描述】OIER公司是一家大型专业化软件公司,有着数以万计的员工。作为一名出纳员,我的任务之一便是统计每位员工的工资。这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资。如果他心情好,就可能把每位员工的工资加上一个相同的量。反之,如果心情不好,就可能把他们的工资扣除一个相同的量。我真不知道除了调工资他还做什么其它事情。工资的频繁调整很让员工反感,尤其是集体扣除工资的时候,一旦某位员工发现自己的工资已经低于了合同规定的工资下界,他就会立刻气愤地离开公司,并且再也不会回来了。每位员工的工资下界都是统一规定的。每当一个人离开公司,我就要从电脑中把他的工资档案删去,同 阅读全文

posted @ 2011-01-22 17:53 reflec94 阅读(277) 评论(0) 推荐(0) 编辑

CQF平衡树——SBT论文——Size Balanced Tree

摘要: Size Balanced TreeSize Balanced Tree(SBT)是一种平衡二叉查找树。它的论文由中国广东中山纪念中学的陈启峰于2006年底完成,并在Winter Camp 2007中发表。由于SBT的拼写很容易找到中文谐音,它常被中国的OIer们戏称为“傻X树”、“Super BT”等。但它的性能并不SB,编写起来也并不BT。恰恰相反,SBT易于实现,且据陈启峰论文中所言,“这是目前为止速度最快的高级二叉搜索树”。它能在O(logn)的时间内完成所有BST的相关操作。而且由于SBT赖以保持平衡的是Size域而不是其他“无用”的域,它可以很方便地实现动态顺序统计中的select 阅读全文

posted @ 2011-01-22 17:46 reflec94 阅读(1966) 评论(2) 推荐(0) 编辑

SBT的应用——求区间第k值——poj2761

摘要: Feed the dogsTime Limit:6000MSMemory Limit:65536KTotal Submissions:5092Accepted:1348Description Wind loves pretty dogs very much, and she has n pet dogs. So Jiajia has to feed the dogs every day for Wind. Jiajia loves Wind, but not the dogs, so Jiajia use a special way to feed the dogs. At lunchtime 阅读全文

posted @ 2011-01-22 17:40 reflec94 阅读(620) 评论(0) 推荐(0) 编辑

导航