8.14实战感悟

来源:互联网 发布:js childnodes方法 编辑:程序博客网 时间:2024/05/20 22:28

今天的题相对于来说并不是那么难……
可能这几天爆炸的次数比较多
没关系,相信自己的rp一定会回来的!!!

T1

显然 O((NM)^3)是不行的
所以我们要考虑优化
两种方法的大致思路是不变的:先枚举横着怎么切,再想办法优化竖着切的过程
我们可以用二分答案来解决这个问题
要求最小值最大,基本上就是二分了
说一说怎么二分答案
二分最后的最小值是多少
然后开始切,枚举到某一列的时候我可以知道当前4个矩形分别的面积
如果4个矩形中面积最小的不小于二分出来的答案,就可以在这个地方切一刀
最后判断是否切了大于3刀即可(因为最后一列也要切,但实际上不用)
时间复杂度 O(N^3*M*log Ans)
另外一种方法不太会,到时候再慢慢研究
二分的方法还是十分的简单易懂的

T2

眼睛一看就是树形dp题……基本不怎么要想其他的算法
关键是怎么O(n)求出所有的点的信息
50%的暴力我就不说了
我们可以把所有的关键点连成一棵树(官方说法叫虚树,很高端),然后树形dp一下就行了
可能这道题对于那些树形dp练得太少的人来说就是灾难(比如我)
反正我当时也就话15min拍了一个N^2暴力,骗到50分
这道题是一道原题(尽管整套题都是原题),百度一下会出现这道题
树形dp还是要多练练的
特别是那些可能要考虑到子树外面的情况的dp题
yjz大佛仔细地研究了另一位大佛yjq的代码,发现他的代码特别强,比xyx大佛的代码还要强
打算明天请他来帮我讲一下他神奇的AC算法

T3

当时不知道怎么O(1)求出某一段分k次的方法,就不会做扔那了……
其实40分会了100分也就迎刃而解了
40%(M=1)
用贪心的思想,K次的清空就是把数列分成K+1段等差数列
所以为了让和尽量小,所以我们要将这些数分的尽量均匀
然后自己公式推一推就行了
100%
观察到M,K特别小,所以我们肯定可以在上面来做dp
令f[i][j]表示前i个牛棚分j次的最小值
那么,f(i,j)=min{f(i-1,k)+calc(cnt[i],j-k)}(cnt[i]表示第i个牛棚中牛的个数)
时间复杂度 O(MK^2)
那么我们就轻松A了这道题
开始疯狂地膜拜后两题AC的强无敌大佬们
是不是除了第二题其他题真正想明白都很简单啊

总结

有一种非常玄学但又非常好用的思路,就是看数据猜标算……
对于一些东西你暴力拿不到满分的时候,先不要急着去用其他算法,先尽可能优化你的暴力
要学会观察数据规模,写出合适的算法(无论是标算还是部分分算法)
这种操作可以使你成为大神,也可以使你成为部分分大神
说实话,有些时候部分分和满分是几乎一样的,就差那么20-30分,没什么关系(除了那些比较水的题啊)
所以还是要适当选择算法和代码
最后,要合理安排考试时间
我只用了1h来写代码,大部分时间都在想题(T1花了30min,T2花了一堆时间,然而想不出)
还有最后5min检查完文件名之后开始扫雷
说明时间安排不正确,T2花的时间过多,然而却并没有什么效果
所以对于一道题不要花太多的时间
先把这道题解决的心理是无可厚非的,但是最关键的还是合理安排时间
可能后面真正有很多分的没写,就算前面的你写对了还是和其他人一样

所以考试就是这样 一鼓作气,三道暴力,有空再想题
可能这样比较合理
毕竟每个人的方法都不同,关键是自己要运用最适合自己的方法
上述仅为我的看法,请勿玩火模仿

原创粉丝点击