2010.10.oj记录

【haoi2008】玩具取名(wa=>ac)

source:bzoj1055

summarize:dp。一开始没有判断无解的情况。

 

【haoi2008】硬币购物(ac)

source:bzoj1042

summarize:dp+容斥  这题我想了一个早上都想不出来。。实在是好题。。

 

【usaco2008 oct】牧场行走(ac)

source:bzoj1602

summarize:最小生成树。。。看到这个词就应该知道这题怎么做了。。

 

【[spoj 744] longest permutation】(wa=>ac)

source:bzoj1318

summariz:模拟,构造。。这题我一开始是二分长度。。wa了之后自己出了一组数据。发现不行。。。。二分是明显错了。。我囧了。。。

 

看了题解后才顿悟的。巧妙的题目

对于一个题中要求的数列。必然满足一下条件

A.数列中元素都不同

B.数列中元素和为(q+1)*q/2

c.数列中包含1

 

所以。。我们从每个1的位置向做搜索。。假设包含这个1的数的。最大值在左边。。。向左扫描的过程中不断更新最大值。。

通过记录前缀和该数后面第一个出现相同的数的位置

设最大值为max。。。向右最早出现相同的数的位置r也不断要更新。。

比如当前到了i。i+max<r 且sum[i+max-1]-sum[i-1]=max*(max+1)/2 可以更新答案。。

 

【usaco 2010 open 奶牛的跳格子游戏】(wa*2=>ac)

source:bzoj1915

summarize:dp+单调队列优化   这题因为跳过去没什么限制。跳回来有要求。。如果直接顺着做。。貌似不知道如何做。。所以我们倒着来

f[i]表示倒着跳回来到第i格的最优值。

f[i]:=max(f[j]+sum[j-1]-sum[i-1]+a[i]+a[i+1]) ...sum表示非0的数的和。。。j (i+1,i+m]

注意到0的时候可以直接跳。。不一定要取前面的。。

就是

f[i]:=max(f[j]+sum[j-1]-sum[i-1]+a[i]) i=0

答案是

f[0]和f[1]中比较大的那个(因为1可以直接跳到0)

 

 

【usaco2010 jan telephone】(wa*3=>ac)

source:bzoj1785

summarize:tree dp  每个节点最多支持m个通话,我一开始把背包开到了2*m+1。。。这样应该是m+1个

 

【usaco2010 mar gather】(wa=>ac)

source:bzoj1827

summarize:基础的treedp。。一开始最大值赋小了

 

 

 【balance】(wa*2=>ac)

source:bzoj2022

summarize:基础的dp。。。要开int64,。。一开始在pku  ac了直接交就 wa了- -。。囧

 

【cqoi2007 余数之和】(wa=>ac)

source:bzoj1257

summarize:直接一遍扫过去。。对于同样除完后的得数。。余数必然成公差为除数的等差数列、、一开始把k写成n。。

 

【poi2009 石子游戏kam】(ac)

source:bzoj 1115

summarize:这题再fj省队集训时候听过。。转换成nim游戏

 

【zjoi2007 最大半联通子图】(wa=>ac)

source:bzoj1093

summarize:我的代码太长了。。这题一开始没有开编译开关。。= =..直接缩点。。拓扑序加一下就好了

 

【scoi2005 扫雷】(wa*2=>ac)

source:bzoj1088

summarize:这题我弱弱的用f[i,a,b,c]表示第i各对应的相邻三个的顺序。。其实一边递推就可以了、、、枚举开头两个。。然后后面的一格确定一个。。答案是可能是0 1 2

 

【zjoi2007 时态同步】(wa*6=>ac)

source:bzoj1060

summarize:我能用int64 全部int64..wa了。。

然后我除了答案是int64其余的 开longint。。。。ac。。。

【ahoi2008 meet】(ac)

source:bzoj1787

summarize:很久以前做的。。当时一直mle。。后来让rmq少开一个数组才ac

 

【zjoi2007 棋盘制作】(ac)

source:bzoj1057

summarize:这题基础的极大子矩阵。。过程中顺便记录一下每个极大子矩阵长宽中最小的那个的最大值

 

【zjoi2008 生日聚会】(ac)

source:bzoj1037

summarize:一开始我想是用f[i,j]表示前i个。。男孩最多比女孩多j人。。由可行状态推可行状态。。。后来发现这样不知道男孩几人

f[i,p,j] 新加的p表示前i人有p个男孩。。。再后来又发现这样无法表示女孩的。。。决定再开个相同的数组。。感觉不行。。=- =、、、

囧。。。最后直接再加一维。。。

f[I,J,X1,Y1]表示前i个人。。有j个男孩。。
其中以i为结尾的一段男孩最多比女孩多x1人
(同上)...........女孩最多比男孩多x2人     

 

【shoi2008 汉诺塔】(ac)

source:bzoj1019

summarize:神题。。。。neerc2007。。正解要是我一般是想不出来。。

但是这题可以找规律= =、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值