|
|
|
|
|
摘要:
NOIP2011结束了,搞了个不好不坏的成绩:460,河北省第8,高二第五,所幸没丢掉省选资格,而且经目测是河北唯一一个得到省一的高二女生……省选压力似乎小些吧……额、可是省选不是我的目标啊= =那样进省队后还不是各种不会各种被虐被鄙视~>_<~ 我的目标是湖南的沈添笑神牛。虽然沈添笑神牛在NOI2011上发挥的不理想,可HNOI2011见证了实力啊~现在还差很远,不到一年的时间,努力追吧! 额、我也老了……也讲了第一堂课……于是,我就有了把我的NOIP前Poj上的AC Record放上来的想法…… 嗯,新学的OIer和ACMer可以看看,老牌的OIer以及ACMer就不要鄙视了~ 阅读全文
posted @ 2011-10-08 09:23
This_poet
阅读(708)
推荐(1)
编辑
摘要:
题目大意:有N盆花排成一圈,每盆花有一个吸引力值,然后有M次操作,每次可以把指定一盆花的吸引力值改成指定的数。输出每次操作后连续的一段吸引力最大的和,其中,N盆花不能全选、也不能不选。算法讨论:大概,这道题Zeyuan Zhu的目的是要考线段树的吧。可我正在学习splay,就找了这样一道简单些的线段树题目来做~splay的基本知识,推荐2006年国家集训队杨思雨神牛(我的偶像之一)的论文,以及jzp教主的《运用伸展树解决数列维护问题》论文。维护一棵splay,其中每个节点表示一盆花,其中每个节点记录这样几个关键字:size(这个节点所控制的数字数目)、value(这个节点的数值)、sum(这个 阅读全文
posted @ 2011-12-06 21:29
This_poet
阅读(560)
推荐(0)
编辑
摘要:
题意N个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务。从时刻0开始,这些任务被分批加工,第i 个任务单独完成所需的时间是Ti。在每批任务开始前,机器需要启动时间S,而完成这批任务所需的时间是各个任务需要时间的总和(同一批任务将在同一时刻完 成)。每个任务的费用是它的完成时刻乘以一个费用系数Fi。请确定一个分组方案,使得总费用最小。算法讨论毫无疑问DP.转移方程:dp[i]=Min{dp[j]+(sumF[i]-sumF[j])*sumT[i]+s*(sumF[N]-sumF[j])},其中dp[i]表示的是完成1~i的工作的花费+因为开机 阅读全文
posted @ 2011-11-30 13:26
This_poet
阅读(596)
推荐(0)
编辑
摘要:
二分答案,但是这里的判断不同于一般的二分。分别将cows和cowc按照s和c排序。我的代码里check函数的返回值含义如下:-1 直接输出,不可能满足条件了0 这种方案是满足条件的,可以把中位数调大试试1 这种方案是不满足的,但是把中位数调大就有可能满足了(否则不可能满足)2 这种方案是不满足的,但是把中位数调小就有可能满足了(否则不可能满足)还是不会用cpp,用了switch语句却没写break,导致纠结了好长时间。终于给家里台式机装上Ubuntu了,才发现NOI Linux就是害人用的啊。参考代码# include <cstdio># include <iostream& 阅读全文
posted @ 2011-11-28 22:53
This_poet
阅读(1498)
推荐(0)
编辑
摘要:
标准的SBT,其实可以用堆来做的……这题没有体现出SBT强大的Delete功能~参考代码:program poj3481;//By_Thispoetconst maxn=1000005;var sum,m,p,q,root:longint; left,right,size,key,num:array[0..maxn]of longint;procedure left_rotate(var t:longint);var k:longint;begin k:=right[t]; right[t]:=left[k]; left[k]:=t; size[k]:=size[t]; size[t]:=.. 阅读全文
posted @ 2011-11-20 10:49
This_poet
阅读(785)
推荐(0)
编辑
摘要:
好久没写Dfs了,拿来练手。WA了一次,没有判断中间的情况……解法:先用Floyd传递闭包处理哪些点一定要在一起、哪些点一定不能在一起,六重循环。然后深搜,res[i][j]表示1,i这个物品在j这一行的匹配物品列编号。没有最优性剪枝,只有一堆可能性剪枝:(1)对于和(1,i)这个点关系为“一定在一起”的点(j,k),一定要将res[i,j]设置为k。(2)即将搜索res[i][j]为k的情况是否可能,那么条件就要是(j,k)这个点与(1,i)点的关系不是“不可能在一起”,而且(j,k)这个点与所有已经和(1,i)点匹配的点的关系不是“不可能在一起”。参考代码:program poj1683; 阅读全文
posted @ 2011-11-01 17:33
This_poet
阅读(506)
推荐(0)
编辑
摘要:
水水的DP,网上居然有人说200*400*20会爆内存~于是想了一个滚动数组的,但是状态记录就不好办了,后来才发现200*400*20是没问题的……状态转移方程:dp[i][j]表示选出i个人、两方差值为j的时候两方价值和的最大值dp[i][j]=max{ dp[i-1][j-p[i]+d[i]]+p[i]+d[i] }记录路径的话,直接记录并倒推即可……参考代码:program poj1015;//By_Thispoetconst maxn=4000;var i,j,k,m,n,p,test :longint; mini,maxi :longint; f :array... 阅读全文
posted @ 2011-10-31 18:18
This_poet
阅读(599)
推荐(0)
编辑
摘要:
显然,这是一个置换群问题,答案m就是将n这个数拆成k个(1=<k<=n),k个数能够得出的最小公倍数。简略证明:序列会被分为若干个群,每个群需要交换这个群的size次才能够回复原位,因此,问题转化成求将n这个数拆成k个(1=<k<=n),k个数能够得出的最小公倍数,以及满足题目要求的字典序最小的序列。DP预处理:dp[i][j]表示将i这个数字划分成j个,这j个数能够组成的最小公倍数。那么方程就是dp[i][j]=max{lcm(dp[k][j-1],i-k)} (j-1<=k<=i-1)注意,要令字典序最小,必须使划分的集合数尽量多,并按照集合大小从小到大 阅读全文
posted @ 2011-10-31 18:09
This_poet
阅读(572)
推荐(0)
编辑
摘要:
首先,纪念我用Linux系统AC的第一题… 安装这个万恶的NOI Linux系统费了6小时的时间,不过好在最后终于装上了,但是因为我安装的Linux系统比较烂,还遭到了小花儿和js的鄙视,唉,本人蒟蒻,有什么办法呢…和SJZEZ的模拟赛Day2杯具,少考虑了一个条件丢掉100分,总分368,Rank3,被小花儿和SJZEZ的LYD神犇分别以480分和435分虐了,Day1还被SXY神犇虐了7分,还好Day2追回来了,总分比SXY神犇多27分险居Rank3;CL2姐姐同杯具,Rank5。非常奇葩的是,两校排名冠亚军是男生,第三名到第五名被两校仅有的三个参加考试的女生占据…嗯,也算给NOIP涨了. 阅读全文
posted @ 2011-10-26 22:32
This_poet
阅读(1349)
推荐(0)
编辑
摘要:
算法讨论:先按照y坐标排好序。二分答案,利用线段树判断是否可行。这算不算是离散化呢?算是广义的离散化吧。开始的时候没有更新,后来意识到错误后加上了更新反而错了,于是就偷了个懒把线段树build了log10000次,这样时间复杂度就变成了(log10000)^2*10000,过得很纠结……其实不用build那么多次线段树的。代码:program corral;//By_Thispoetconst maxn=505;maxx=10005;var i,j,p,c,n,mid,left,right,ans,k :longint; tree :array[0..maxx*10]of reco... 阅读全文
posted @ 2011-10-24 17:30
This_poet
阅读(520)
推荐(0)
编辑
摘要:
算法讨论:贪心+kruskal1、首先删掉所有与根节点相连的边,这样整个图就变成了若干个极大联通子图,对每个极大联通子图进行一次最小生成树的计算,然后对于每个极大联通子图找一个离根节点最近的点。2、根据这两步的结果求出每个点到达根节点所经道路中权值最大的边,如果这个点与根节点有边相连并且边权小于之前求出的最大边,那么更新答案并删边。3、重复步骤2,直到没有可更新的点或者根节点度数达到限制。POJ数据比较弱,不删边也能过。代码:program poj1639;//By_Thispoetconst maxn=25; maxm=10005;var i,j,k,m,n,p,q,tot,b,ans :. 阅读全文
posted @ 2011-10-22 11:39
This_poet
阅读(914)
推荐(0)
编辑
|
|