Dairy?Diary!

2019/9/20

既来之则安之。没什么好惆怅好难过的。
竞赛本来就是你现在的任务重心
这样的安排也可以为你提供更多的学习时间
你不是总闹着时间不够用吗
现在就好啦,你可以抓紧时间搞了

每周六8:00上课
买初赛的书
明天(9.21)讲快速幂

任务安排:
17:25下课回去收拾东西(笔袋,水杯)
所以你现在还有大约两个小时的时间
[√]15:20 - 15:45 均分纸牌学习
15:50 - 15:55回去拿东西
15:55 - 16:40 WOJ#1957 糖果传递
16:40 - 17:25 WOJ#1593 联合权值

均分纸牌:
0)假设纸牌数量可以是负数
1)对于最左边的纸牌,为了使它的纸牌数达到平均,只要还没有达到平均无论其余子情况如何移动,一定有一步是把自己多余的纸牌移动到右边,或者是从右边移动进来自己差了多少张纸牌
2)第一堆牌只有和右边进行交互是合法的,步骤1是必须的
3)处理好第一堆后,其余操作一定不涉及第一堆,否则答案更劣(经过前一堆是没有意义的)
4)无视第一堆,于是现在又是情况1了(子结构)
5)对于一个会出现负数的方案,通过调整移动顺序,一定可以转变为一个不出现负数的方案。

带权中位数:
给定 N 个有序的数,每个数都有一个权值Di。
此时的中位数就不再是第N/2 个数了,而是∑D[i]/2 这个数。
其实中位数可以看作是权值为 1 的带权中位数。

实际:
只完成了糖果传递

晚上:
计划:NOIP真题两道[√]
17:40-18:40 NOIP2014 Day1T2 联合权值 18:20[√]
18:20-18:50 模板测试-线段树 19:45[√](取模真的超级关键呐!!!)
19:50-21:00 NOIP2016 Day1T3 换教室 21:24[√](抓紧时间,少说话,多做事)

感想:
f[i][j][0/1]表示前i个课程申请了j门,当前这门课是否申请的期望最小值

知道状态定义后……
就很简单了

可问题就是如何定义这个状态。
可能这就是我和神仙的差距吧。
              --《论NOIP与NOI的差距》

             
21:00-22:00 NOIP2015 Day2T1 跳石头 21:39[√](T1果然还是比较简单。二分即可)

2019/9/21

8:25-8:40 推矩阵式子
8:40-12:00 考试

T1 WOJ#2363 路面修整 0pts

原题啊,1月25日才做了的啊。。
欲哭无泪,完全没有想到要dp,连贪心都不知道该怎么打。
像只无头的苍蝇,找不到方向。总是这样,看到dp定义的式子后就能明白,自己就不能想到式子。
每次都说要多练题,但真的有多做吗?(反省ing)
做的又少,做了又忘,菜鸡真的很无奈
不,我会加油练的!!!

f[i][j]表示前i个数,最后一个修改为b[j](b[j]表示原高度从小到大排序后的数组)的最小值
f[i][j]=min(f[i][j],f[i-1][k]+abs(a[i]-b[j])) 1<=k<=j
但这样就是n^3的了
仔细想一下,发现可以直接变成
f[i][j]=min(f[i][j-1],f[i-1][j]+abs(a[i]-b[j]))
(因为f[i][j-1]会包含f[i-1][1~j-1]的情况)

下午改题,讲课,初赛注册。
没有改完考试题……

2019/9/27

本来应该15:00就到机房学习
然后出于该死的班级责任感,下去练习跳绳了。

突然感慨万千

也许到最后没有人会在意过程中我们经历了什么,但至少我们知道。
当每一个姑娘从害怕、退却到尝试,再到失败,然后重新开始。
这中间的泪水、汗水以及最后的成功。

全世界都会为你欢呼。
你从来没让我们失望。

所以现在,
收拾心情,回归竞赛。
我也不能让大家失望,是吧。

任务安排

1.上周考试的两道题
2.NOIP真题两道

16:20~17:20 WOJ3316 MAF-Mafia [√]17:27(保证思路的清晰)
17:30~18:00 吃饭(正值排队高峰期……下次要么早走要么晚走)
18:00~18:45 WOJ2354 翻格子游戏[√]19:30 (n和m打错……)

19:30~22:00 WOJ1582 愤怒的小鸟
哇,猝死机房
错误的贪心,还蠢蠢地调了那么久┭┮﹏┭┮

先选sze最大的情况,可能没有几条较小的拼起来优
我的天啦!!!浪费了一晚上
所以说要想清楚再下手
你想啊,如果这样就是对的,还有dp的作用吗。。。直接排序贪心就好啦(做梦吧!)

2019/9/28

昨天晚上和daddy谈了很久(zZ困Zz)
说到竞赛的学习方法,虽然daddy也不是很懂,但他觉得学习的套路都是一样的。
最后我们一致认为需要把以前做过的考试题重新做一遍,就像文化课的学习需要用到错题本,以前不会的后面再重做(多半还是不会)。加深自己对这个方法的应用(像之前每次做到原题还是不会做)。
但是联赛真题还是需要完成。
所以每天晚上的刷题:两天做以前的题,两天做真题,两天做专题训练

其实昨天晚上差点和daddy吵起来,在讲到文化课的学习的时候,他让我一定要整理错题,可是我没有那么多时间!但今天冷静下来想想,时间不够难道是别人的问题吗?时间都是自己挤出来的,为什么别人可以提前一个小时写完作业,但我只能掐点呢?自己的问题,好好反思,抓紧时间!

今天没有考试(L说国庆有的是时间考)
那么任务安排如下:
8:30~9:30 愤怒的小鸟[√]9:25

哇……昨天都想到那个份上了都没有推dp
今天晓得是dp后,就随便乱推啊,然后就被卡精度,调了调就A了

什么鬼啊,那么水的题。。。很简单的一个线性dp,居然都不会应用!
不过好歹还是自己推的,鼓掌

9:30~9:35 休息[√]9:30
9:35~12:00 2018/6/26考试题
SOJ 2172 [√] 10:10 简单的线性dp,从后往前推
SOJ 2173 [×] 11:30 做不来了,蛇皮走法不知道怎么分析

由于每个格子只能走一次并且不能不走,所以最后的走法其实是固定的
Dairy?Diary!_第1张图片
大概长这样。
这样的话我们就可以固定右边,枚举中间,推出左边
hash可过,什么神仙基础题
原来还有hash表这个玩意儿
其实和链表的思路一样

11:30~12:00 HDU3986 思考
滚去复习了一发黑暗城堡,,,没做出来(daddy说的太有道理了)

下午图论专场
2:30~3:00 黑暗城堡
果然还是太菜了。

黑暗城堡:首先找出最短生成树,然后看每一个点有多少种情况可以被到达(也就是说对于点p,有多少个点x满足 d i s [ p ] = d i s [ x ] + w [ p ] [ x ] dis[p]=dis[x]+w[p][x] dis[p]=dis[x]+w[p][x])最后把所有点的可能情况乘起来就是答案了。

3:00~4:00 国王的游戏
tyz让我帮看一下。
由于以前做过就看了一下,结果hhhh
推了好久……
邻项交换证明贪心,你值得拥有

4:00~5:00 HDU 3986+HDU 4370
HDU 3986
什么垃圾题,复杂度显然不对。
害得我想了好久,结果一翻题解……就是枚举嘛。。。垃圾题

2019/9/29

16:00~17:20 HDU 4370 [√]16:55
哇塞,好题
这个转化我给满分,对题目进行深入分析后发现其实就是求从1到n的最短路。
X i j = 1 Xij=1 Xij=1看做 i i i j j j有一条路径
X i j = 0 Xij=0 Xij=0看做 i i i j j j没有路径
那么对于题目条件

  1. X 12 + X 13 + . . . X 1 n = 1 X12+X13+...X1n=1 X12+X13+...X1n=1
    转化一下就是说:保证1这个点有一条出边(这一条边不能连向自己)
  2. X 1 n + X 2 n + . . . X n − 1 n = 1 X1n+X2n+...Xn-1n=1 X1n+X2n+...Xn1n=1
    转化一下就是说:保证n这个点有一条入边(这一条边不能来自自己)
    3.for each i ( 1 < i < n ) i(1i(1<i<n), satisfies ∑ X k i ( 1 < = k < = n ) = ∑ X i j ( 1 < = j < = n ) . ∑Xki (1<=k<=n)=∑Xij (1<=j<=n). Xki(1<=k<=n)=Xij(1<=j<=n).
    转化一下就是说:保证中间所有点的入度等于出度

然后最短路就很显然了

可你以为这样就完了吗?
不,too young too simple
还存在一种情况:就是有两个环,一个是起点到起点,一个是终点到终点
判断一下取最小值即可

2019/10/2

8:20~12:00 考试
T1 CF65A 100pts(防爆零)
T2 CF715E 20pts
T3 CF65D 40pts
Total 160pts

最高220pts
被高一吊打,太丢人了
身败名裂
算了算了,自己加油加油吧(ง •_•)ง

14:00~14:30 瞎磨叽不知道在干什么
14:30~15:30 听评讲
15:30~15:55 调T3(记得清空)
T3 暴搜+记忆化
记忆化–>如果当前这种计数器顺序出现过,由于计数器的和表示了当前在第几位,那么这种情况就是计算过的了
15:55~16:05 休息 (o゜▽゜)o☆
16:05~16:22 给三楼讲T3(这有什么好讲的吗……)

T2 转图论+组合数学
仲爷说是什么“置换群”,超级基础
然后和wlf讨论了40多分钟,还是没有理清楚(抓狂,先放一下吧)

2019/10/03

8:00~11:30 考试
T1 SPJ 1937 20pts
T2 SPJ 1938 0
T3 SPJ 1939 30pts
Total 50pts

考场时间浪费太多
一开始半个小时,dev炸掉,换了台机子
先开T3,完全没想过折半。学习了2^16这种范围倒大不大,折半处理就很友好了
然后也没想过分块
自己用trie树,就不应该建完16个。
wjs直接根据具体长度操作(从低位处理)就trie树搞A了

emm……事实上,完全看脸A的啊!!!!
交到OJ上还是T。这个0.9我只服wjs。。。。
Dairy?Diary!_第2张图片

T1没想过dp……打表找了个规律,然后一开始也根据规律写了一个方程
后面发现这个方程不能囊括所有情况
然后由于时间不够又太依赖打表没有动脑去思考方程实际意义,就交了一个暴力上去
考后发现大部分人都推出来了方程,我……

T2没时间了。T3想了太久。

综上所述:没把握好时间,没动脑筋。。明天考试一定要吸取经验,多动脑多思考!!

开始调题!
T1可以思考出来方程的
T2水题……居然都没时间开
T3好妙啊(!!hxy太强啦!!)
试想,如果我们定义 a [ x ] a[x] a[x]表示x以及它所有子集的个数,那么查询的时候就是O(1)的。但是每次加入和删除就是216
如果定义 a [ x ] a[x] a[x]表示x出现的个数,那么加入和删除是O(1)但每次查询是216
这样看来走哪边都行不通了
既然如此,我们就折中一下
定义 a [ x ] [ y ] a[x][y] a[x][y]表示x确定(前八位)y以及它的子集(后八位)的个数
那么查询的时候,只用枚举前八位,28
加入和删除的时候就是枚举后八位,28
所以总的复杂度就是O(n*28

16:35 完成今天考试题【✓】

HDU6166(由于HDU系统维修中,所以还没写)

基础版的Dijkstra是单源多汇的,但是本题是多源多汇,但是Dij他是单源的……等等。。。Dij也可以多源呀,只要开一个超源0,用长度为0的边连接到各个起点,在把每个终点用长度为0的边连接到超汇n+1,这样0 - n+1的最短路就是从所有的起点到所有的终点路径中最短的。那么我们要想办法把真正最短答案的起点 分到起点集合中,把真正的最优终点放到终点集合,其他的随便放哪里都行。emmmm随机化算法随机分组。。。期望做4次可以得到正确答案。。。。

官解:按照点的标号的每个二进制位分组,最多分20次(准确的说是17次)。每次会把某一位不同的点分开到起点和终点集,然后再起点终点互换,再做一次。

正确性在于:对于任意两个点u和v,u和v是不同的点,必然有至少一个位不同,因此至少有一次他们被分到了各自正确的集合中,得到了正确答案,其他的答案都比他要大。

20191004

今天不考试
自己狂刷题

8:00~8:30 外网炸掉,机房哄闹;高一同在,人声鼎沸……
8:30~10:30 原题(20180629)
10:30~10:40 休息
10:40~12:00 图论专题(新题)

我还是tcl
现在11:30 我才刚刚把三道考试题看懂(这还是以前做过的啊,虽然翻了一下博客发现以前只写了T2,可我就连T2也没想到正解。天啦,重做以前的题才会发现自己掌握的到底是个什么狗屎o((⊙﹏⊙))o.)
不过这些方法真的都好棒(๑•̀ㅂ•́)و✧

总结一下:
T1 SPJ2032 大体方向正确(和20191003的T2有异曲同工之妙)
维护一个前缀值,扫一遍,如果遇到 x 就加一,遇到 y 就减一,然后看前面有多少个前缀值跟当前的值相同,加进答案里。
这样做的缺点在于每次都要重新 O(n)地扫一遍,但是其中有很多位置是没有用的,所以我们可以把 x 的所有出现位置和 y 的所有出现位置拿出来,排序之后从前往后扫,做法与前面的暴力类似,但是压缩了中间没有影响的位置。(两次出现x的中间部分的答案是可以O(1)算出)
由于这样做相当于将所有颜色不同的位置对都枚举了一遍,所以这样的复杂度是 O(n^2)的。

T2 SPJ2033 性质想到了,不会维护
和当年一样,一眼性质
然后
仍然和当年一样,不会维护(明明应该掌握的!)
有删除操作,求序列第k大
二分+树状数组 或者 权值线段树 也可以

T3 SPJ2034 完全没思路
当年肯定看到题解是分治+dp后,就弃疗了
不过现在重新来看,也不是那么难的事儿
(还有啊,这样选或者不选的情况,一般好像都和dp有点关系)

T4 SPJ2035

14:00~14:30 弄生物资料+电脑死机
14:30~15:30 调上午两道题T1 & T3
15:30~15:40 休息
15:40~17:00 图论专题

我还是tcl
现在16:30 我才刚刚把T1调出来。。。被上午看到的那篇题解洗脑了(那篇题解后来找不到了,但是真的贼拉麻烦)后来重新改了一下。不能被题解限制住思维!离散化的话,要在去重后的序列里lower_bound,否则就会RE


2019/10/05

8:00~8:30 我就搞不懂了,来那么早干什么……
8:30~12:00 考试
T1 WOJ 4731 100pts
T2 WOJ 4732 0
T3 WOJ 4733 0
Total 100pts

T1 dp+后缀max优化
T2 弃×(仲爷都只能口胡,我还是不要自己找事儿玩了)
T3 二分+网络流
“最大的最小” 想到了二分
根据此题的性质 想到了网络流
但是也不知道为什么脑袋缺根筋
就没有把两者联系到一起
联系到一起后就分分钟啦

事实上做了一下后,也没有说得那么简单
是从猫向关系建边(不是拆点)
因为关系最多被访问一次嘛

16:00~16:23 昨天的T3,果然要在脑袋清醒的时候想
16:25~17:00 Right Build Gym - 101149L

超级经典的说
只想到了1/3(也就是D[i])
我们首先跑一遍从0开始的单源最短路,设定为D【i】;
然后反向建图:
①跑一遍从a开始的单源最短路,设定为F【i】;
②跑一遍从b开始的单源最短路,设定为L【i】;
然后我们枚举一个重复路径点,使得同时维护D【i】+F【i】+L【i】的最小值即可。


2019/10/06

SCU 4444 Travel

8:00~9:00 CF 400d   9:07[√]
瞎搞居然A了……时限也太松了
500次最短路+小优化
(以前做过【但是不出所料地忘记了】)

正解:
如果当前路径边权x为0,就将两个序号的细菌连接连接(并查集),然后在判断是否正确的时候,只要同一种细菌处于同一集合即可。然后处理最短路径就用Floyd算法。

9:00~10:00 CF 667d 10:24[√]

想题的过程中又坐不住了……东搞一下西搞一下
“娃呀,你能不能乖乖听话?
喊你想题的时候就莫要东扯西扯
一会儿吃水果,一会儿浏览网页……
气死人了啊!”
“遵命∠(°ゝ°)”

(这个暴力优化我觉得很有用)
直接枚举四个点,显然不可过
考虑枚举前三个点,那么第四个点一定是第三个点的异于前两个点的最远点。这样我们就把复杂度降到了n3
再思考如果我们只枚举前两个点,第三个点是第二个点的最远点,那么第四个点是第三个点的最远点,此时不一定就是最优解,因为第三个点会对第四个点产生影响。
然后发现第一个点其实和第四个点本质一样

最后我们就只用枚举中间两个点,第一个和第四个之前预处理出来

(由于边权都为1,我们直接bfs找最短路即可)

10:10 ~11:10 CF 507E 11:35[√]
所以动动脑筋还是有好处的(主要是水题,写来找信心(*^▽^*))

11:10~12:10 SCU 4444 Travel 11:56[√]
(最近怎么各大网站都在维修???思想明白还没写)
具有一定性质的完全图求最短路
根据边权分类讨论即可

现在有一点慌。
10/18初赛
10/14、15月考

得抽时间复习初赛
(初赛更重要。文化课……随缘。
抓紧在学校的时间。周五周六就都搞竞赛)

慌也莫得用啊┓( ´○` )┏

下午
14:00~14:30 刚刚睡醒的xly总是神志不清……
14:30~16:30 2018/7/8考试题 16:10[√](都没有代码实现)
T1 WOJ4589
时间没卡过去
二分check的时候做复杂了
根据单调性可以优化到O(n)

T2 WOJ4590
毒瘤……完全不知道怎么下手
思维背包

在思考的过程中有那么一会儿是在往正解的方向靠
但是没有深入想下去了(what a pity!)

T3 WOJ4591
打表+线段树
所有的事情和打表联系在一起后,就变成小学生找规律了:)

总结:不会的还是不会……长记性啊哥们儿

16:30~17:00 WOJ#1609(据说用来换脑袋的) 16:45[√]
刷刷水题 找自信❥

最短路就可以先放一下了。新的任务:最小生成树

2019/10/07

看吧……谁让你盲目自信。

8:30~12:00 考试
T1 WOJ 4740 20pts
T2 WOJ 4741 0
T3 WOJ 4742 40pts
Total 60pts
最高210

这个差距
姑娘啊,只有39天了。
不多说
写题

T1 WOJ 4740
妙啊。
异或和
【血的教训:请开始使用超级读优……】

T2

T3 线段树


2019/10/16

昨天写的忘记保存了……csdn什么时候取消了它的自动保存功能

当天有考试,晚上三道联赛真题;没有考试,复习以前的考试题+专题训练

7:30~8:20 NOIP2015 飞扬的小鸟
好题啊……细节贼啦多
昨天晚上翻了题解发现是dp后
回家敲了个n*m2 (75分)
考虑如何优化:
f [ i ] [ j ] = m i n ( f [ i − 1 ] [ j + d o w n [ i − 1 ] ] , f [ i − 1 ] [ j − k ∗ u p [ i − 1 ] ] + k ) f[i][j]=min(f[i-1][j+down[i-1]],f[i-1][j-k*up[i-1]]+k) f[i][j]=min(f[i1][j+down[i1]],f[i1][jkup[i1]]+k)
问题就在k的枚举上

发现如果只考虑上升 f [ i ] [ j − u p [ i − 1 ] ] = m i n ( f [ i ] [ j − u p [ i − 1 ] − ( k − 1 ) ∗ u p [ i − 1 ] ] + k − 1 ) f[i][j-up[i-1]]=min(f[i][j-up[i-1]-(k-1)*up[i-1]]+k-1) f[i][jup[i1]]=min(f[i][jup[i1](k1)up[i1]]+k1)
然后就会发现dp的优化好像都是从上一个阶段直接挪过来

这样做完后以为分分钟就能A
结果各种细节挂

  1. 最后比较最小值的过程,用
  2. 由于只考虑上升,需要调用j-up[i-1]的信息。哪怕j-up[i-1]本身这个位置不合法,但是它转移到的j是可能合法的。所以我们先从1~m都做一遍。最后再考虑下降和不合法情况的剔除

今天没有考试,上午先做专题训练吧
8:30~10:10
POJ 1639 最小度限制生成树
将1号点分离出来,求出剩下部分的最小生成森林
然后在每一个连通块(总数为tot)中选择一个点u,使w(1,u)最小
这样就得到了一颗1号节点度数tot的最小生成树
然后我们还可以选择S-tot次,进行“松弛”更新答案
选择不在当前生成树上的点x
找到1~x这条路径上的边权最大值

10:20~11:10
POJ 2728 最优比率生成树
本来只是一道0/1规划的板题
结果因为稠密图用了kruskal而疯狂TLE
看来Prim还是有点用

11:10 ~12:10
BZOJ 3058四叶草魔杖
虽然知道了标签“最小生成树+状压dp”
但是依旧不知道怎么下手

学习一波题解后
有了那么一点点感觉:

看最终答案的组成,一定是许多个连通块(每个块内宝石能量之和为0)的代价和(因为这些块之间如果还要连边则肯定不优)
那么我们就枚举是哪些点在一个连通块
如何计算同一块内的答案呢?
显然是最小生成树(因为在这个块里每个点都必须能被达到,又要代价和最小。)
最后乱凑(把各部分答案来拼接)
(这样的复杂度显然不太对216*216,所以稍微剪个枝)
(求最小生成树的时候判断选择的边的条数==节点个数-1,在外面判断。避免一个点的情况)

14:00~15:00 BZOJ四叶草魔杖
15:00~16:00 POJ 2349 Arctic Network
本来以为也是一道水题……
结果还是有很多细节要注意

  1. 这道题最大的问题就是对题目的理解:有m个卫星基站,最多可以减少m-1条边的使用(一定会构成环,避开较大的边)
  2. POJ上double输出用%f

16:00~17:00 2018/7/10考试题
emm……只有第一题略微有些想法,第二题推了半天也没有思路

17:00~18:00 打球+吃饭
18:00~19:20 复习初赛
19:20~20:00 咳咳……摸鱼
20:00~22:00 复习初赛

不过只有三十天了,不要摸鱼……
每天要把计划执行好!别让自己失望
昨天晚上由于身体不适,可以原谅
今天就不行了!

遗留问题:1.最短路的练习题 2.考试题

2019/10/17

计划
上午考试
下午调题(三道需调完)
中午晚上复习初赛

上午考试:
T1 补票 100pts
T2 删数字 70pts
T3 滑冰 70pts
Total:240pts

最高分:300分
(差距……)

T1 防爆0
T2 dp+优化
呀呀呀,好开心,自己也能推出dp方程(emm……是不是追求有点低了)
但是并没有想到如何去优化!!lsr神仙tql!!
思考 f [ i ] f[i] f[i]需要用 f [ j ] f[j] f[j]来更新,需要满足的条件:

  1. i > j i>j i>j
  2. a [ i ] > a [ j ] a[i]>a[j] a[i]>a[j]
  3. a [ i ] − a [ j ] < = i − j a[i]-a[j]<=i-j a[i]a[j]<=ij

如果按照平时那样枚举下标则一定会满足条件1 (然后我也就直接忽略了这个条件)但在这样的情况下同时满足2、3并且要在logn时间内求出就显得很困难了
仔细分析后就会发现,如果2、3条件满足了1就一定满足。所以1相当于是一个废的条件。
将3变形后
j − a [ j ] < = i − a [ i ] j-a[j]<=i-a[i] ja[j]<=ia[i]就可以直接按a排序后用树状数组搞啦

但实际操作的时候还是有一些问题:(并没有理解透彻)
1.对于排完序后的序列,由于我们有相同的数,所以不满足严格单调。需要先把相同的这一段处理完,然后统一加进去(直接用vector做)
2.树状数组的下标从1开始。而这里0的信息对于我们而言是有用的,所以加数的时候需要加1

T3 优化建边+最短路
n2建边的弊端就在于会连接很多无用的边
而后面你也分析出来了只要相邻两个连就够了,只是没有再往回去想了

总结:
1.做题的时候可能一边想一边得出新的结论,要记得用这些结论试着优化之前的做法
2.dp还是没有很明白这个转移的实质,导致条件的缺失

14:30 行了行了,改完了改完了
14:30~15:00 并没有认真听评讲
15:00~16:40 昨天考试题

  1. T1很NOIPCSPDay1T1就是那种推推结论,O(n)秒过那种。但是我又弄复杂了,想了个线段树?不是很清楚这种题该怎么做,多推推也许会好一点

2019/10/19

我想通过量变来逼迫自己

下午+晚上
1.dp专题训练 5道
2.以前的考试题4道

dp
1.WOJ#3884 烽火传递

  • 考虑哪些信息对我们有用
  • f[i]–>第 i 位发出信号,且前面都满足要求的最小代价
    f [ i ] = m i n f [ j ] + a [ i ] ( i − m < = j < i ) f[i]=min{f[j]}+a[i] (i-m<=jf[i]=minf[j]+a[i](im<=j<i)

2.WOJ#3885 绿色通道

  • 尽管题目描述比较复杂,但稍微转换一下。就是和上面一样的了。我们也只需要关注哪些信息对我们有用
  • f[i]–>第i道题要抄,且前面都满足要求的最小代价
    f [ i ] = m i n f [ j ] + t [ i ] ( i − m i d − 1 < = j < i ) f[i]=min{f[j]}+t[i] (i-mid-1<=jf[i]=minf[j]+t[i](imid1<=j<i)(mid 二分)

3.WOJ#3873 分离与合体

  • 区间dp入门。(好吧,其实都没感觉出来这是dp。用记忆化搜索好理解)
  • 注意对题目的理解
  • f[i][j]划分i~j这个区间可获得的总价值
    f [ i ] [ j ] = m a x ( f [ i ] [ k ] + f [ k + 1 ] [ j ] + a [ k ] ∗ ( a [ i ] + a [ j ] ) ) f[i][j]=max(f[i][k]+f[k+1][j]+a[k]*(a[i]+a[j])) f[i][j]=max(f[i][k]+f[k+1][j]+a[k](a[i]+a[j]))
2019/10/20

周末算是好好休息了一把(泡温泉的幸福时光)
初赛结束了
剩下的不到30天,便是最后的冲刺
这个周末的休息便是为了剩下日子而养精蓄锐
Are you ready,my girl!

17:00~23:00 学习时间
任务:
1.安排下周的学习计划 \/
2.总结图论
3.初赛最后一题(×)明天问一下hxy


4.WOJ#1887 加分二叉树

  • 和上一道题简直一模一样啊(难道区间dp都是这样玩的吗,cool!)
  • 注意对题目的理解
  • f[i][j]以i~j为中序遍历的最高加分
    f [ i ] [ j ] = m a x ( f [ i ] [ k − 1 ] ∗ f [ k + 1 ] [ j ] + a [ k ] ) ) f[i][j]=max(f[i][k-1]*f[k+1][j]+a[k])) f[i][j]=max(f[i][k1]f[k+1][j]+a[k]))
2019/10/21

1.图论的总结
2.区间dp和树形dp
3.斜率优化dp

7:30~8:30 升旗+初赛最后一道题(状压dp)
保存走i步后的必胜或必败状态
由于是从1依次枚举到m的。所以转移的时候
s t a t u s = s t a t u s < < 1 w i n status=status<<1^win status=status<<1win

8:30 ~ 9:30 WOJ#2755 手机号码
敢于定义状态。状态可能会比较复杂(要有耐心地去梳理,看需要哪些,然后就根据需要定义)
f [ i ] [ k 1 ] [ k 2 ] [ 0 / 1 ] [ 0 / 1 ] [ 0 / 1 ] [ 0 / 1 ] f[i][k1][k2][0/1][0/1][0/1][0/1] f[i][k1][k2][0/1][0/1][0/1][0/1]表示第i-1位为k1,第i-2位为k2,是否出现4,是否出现8,是否有连续的3位数出现,是否达到上限

9:30~10:30 WOJ#1198 数数
分块+打表(感觉骗分很有用)
压位统计答案<–这个方法超级棒(类似背包的思想)

10:30~10:40 休息
10:40~11:40 WOJ#1120 数字计数 11:53
┭┮﹏┭┮终于调出来了(虽然以前做过,但现在自己没看题解写出来,还是很不错啦【是不是要求又有点低了/笑】)
枚举每一种数字出现的次数cnt,然后dp统计出现次数恰好为cnt的数的个数
注意前导0的情况(打标记)

11:40~12:40 POJ#3208 启示录 12:00~12:40
脑子一热,写了个二分
本来以为卡卡能过
结果还是太naive了

12:40~13:00 吃饭饭
13:00~14:00 睡觉觉
(总结:这是(* ̄(oo) ̄)的生活吧)

14:00~14:40 POJ#3208 启示录
学习正解
先dp预处理出,i位数为魔鬼数的方案数
然后求出第x小的魔鬼数的位数
最后试填法确定答案
dp预处理:
定义 f [ i ] [ k ] f[i][k] f[i][k]表示i位数,开头有连续k个数为6的方案数
f [ i ] [ 3 ] = f [ i − 1 ] [ 3 ] ∗ 10 + f [ i − 1 ] [ 2 ] f[i][3]=f[i-1][3]*10+f[i-1][2] f[i][3]=f[i1][3]10+f[i1][2]
f [ i ] [ 2 ] = f [ i ] [ 1 ] f [ i ] [ 1 ] = f [ i ] [ 0 ] f[i][2]=f[i][1] f[i][1]=f[i][0] f[i][2]=f[i][1]f[i][1]=f[i][0]
f [ i ] [ 0 ] = ( f [ i ] [ 3 ] + f [ i ] [ 2 ] + f [ i ] [ 1 ] ) ∗ 9 f[i][0]=(f[i][3]+f[i][2]+f[i][1])*9 f[i][0]=(f[i][3]+f[i][2]+f[i][1])9

14:45~15:30 BZOJ#1799 月之谜 15:13
哇……一度非常接近正解,发现了各位数字之和比较小的特点
但是!没有想到可以枚举(我怀疑是思考时间不够。直接翻题解去了,今天上午同样的枚举不是都想出来了吗?多思考比什么都重要)
然后这道题以前做过(事实证明,是否为原题并不影响做的效果【反正都不会】)
重新回顾一下思路,就不敲代码了
那个取模运算记住就好啦
(mod*10+x)%MOD;

15:30~15:35 休息
15:35~16:30 WOJ#3880 涂抹果酱 16:16
太瓜了……
合法的方案居然只有48种
我……就卡在这个规模上,觉得242种铁定超时
哪知道实际有效的只有48种啊,我哭了【嘤嘤怪上线】
然后就可以随便乱搞了啊(这道题提醒我们,当题目有限制时,合法的情况可能远远不如总数。应该手写程序算一下。)

get到一个比较好的取出三进制的第pos位的方法
x % 3 p o s + 1 / 3 p o s x\%3^{pos+1}/3^{pos} x%3pos+1/3pos

16:30~17:20 WOJ#4155 奇怪的道路 17:08
理解了CSP-S初赛的最后一道题后,重新看这道题又有了新的收获
此所谓“温故而知新也”,就是这个意思吧.
一般定义状态都会有阶段,而阶段往往比较好确定
比如这里就是第几个节点,第几条边
而对于限制 1 < = ∣ u − v ∣ < = K 1 <=|u - v| <= K 1<=uv<=K
这就告诉我们对于第i个节点,实际有用的只有i前面K个点的信息,K<=8我们压位走一波
i f ( ( k & 1 ) = = 0 & & ( f [ i ] [ j ] [ k ] [ K ] ) ) f [ i + 1 ] [ j ] [ k > > 1 ] [ 0 ] = f [ i ] [ j ] [ k ] [ K ] ; if((k\&1)==0\&\&(f[i][j][k][K])) f[i+1][j][k>>1][0]=f[i][j][k][K]; if((k&1)==0&&(f[i][j][k][K]))f[i+1][j][k>>1][0]=f[i][j][k][K];
这个转移就很妙了。不用的信息就直接>>1解决了

17:08~18:36 休息

18:36~19:05 2018/07/10 T3
当年都是些什么神仙题
get一个技巧:
如果要求 x < = i , y < = j x<=i,y<=j x<=i,y<=j的互质二元组个数
利用矩阵前缀和(二维前缀和)的思想即可

19:05~20:00 2018/07/12抢匪的财宝
简单dp
如此水的一道题……我居然还打挂了
注意(1,1)这个点
(样例恰好为0,坑人一把好手)

20:00~20:30 2018/07/12 二次元冒险思考
yy了一个建图跑最短路的做法,不知道可不可行

20:30~20:50 休息+随笔杂记

20:50~21:15二次元冒险
直接bfs??这喵喵不是在逗我吗

21:15~21:45 2018/07/16
T1 打表找规律+Bitset
哇……是真的菜
打了个表,也没看出个所以然(你难道没发现相邻两数之差为4的倍数吗)
结论就是找满足4k+1的质数个数(当然也是可以证明的。奇数平方加偶数平方)
然后由于数据范围足够大,要用bitset来存一下

顺便区分了一下欧拉筛和线性筛
线性筛:每个合数都只会被其最小质因数筛去(近似O(n))
欧拉筛:只要是质数就会筛去其倍数(nlogn)
虽然时间上线性筛更优一些,但欧拉筛更省空间
所以这道题用欧拉筛更好(并且在筛的过程中可以根据4k+1的性质优化)

晚上了[呵欠]
来一发总结,然后睡觉走人
计划略微有些不合理。
本来上午计划的是数位dp+斜率优化dp
但实际上只完成了数位dp
下午的状压dp感觉还行
晚上计划完成两套模拟题,实际也不合适
还是改为一套吧(从后面往前面刷)

你可能感兴趣的:(杂文)