本周看了关于并查集,拓扑排序,最短路的一些资料,这几个部分基本复习完了,相关题目在之前基本上就把能做的都做了。
POJ-1182 食物链_飘过的小牛的博客-CSDN博客并查集的这个题再次看的时候发现还是这个题比较经典,题解讲的也比较详细,最后的特殊做法也很好。
在做洛谷题的时候发现有一些英文题自带翻译的题目看不懂,看了题解和讨论才能弄懂题的意思,这种题就在看懂题意上耗时间,目前的解决办法就是直接看英文,看不懂就用翻译软件,最后再看题解。也有些全中文的题的意思表达不清楚(很可能是翻译错误),也有的是输入或输出的内容描述不清楚,看了半天题解才看明白,这种题就只能是通过题解来看题目了。
在做英文题的时候还发现了一个中国和外国的一个不太一样的地方(题目找不到了):比如从时间a到时间b做了什么,我们一般认为是【a,b】,但外国是【a,b)。在做一道题的时候遇到了,找了半天错误才从题目讨论里看到这个“提醒后人”。以后再做国外题的时候注意这一点。
下面是一些特殊点的题:
P2946 [USACO09MAR]Cow Frisbee Team S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
这题刚看的时候我认为是01背包问题,但看到总能力是F的倍数就有点不会了,之前没见过这种题。看了题解就明白怎么做了。如果没有总能力是F的倍数,转移方程是dp[i][j]=dp[i][j]+dp[i-1][j]+dp[i-1][j-a[i]];有的话就是将最后的dp[i-1][j-a[i]]变为dp[i-1][(F+j-a[i])%F],在输入a[i]时还要加上a[i]%=F;这样(F+j-a[i])%F+a[i]一定是F的倍数。
P5194 [USACO05DEC]Scales S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
看了题解,才知道原来输入的数据可以不用全部读取,就这个题而言,因为砝码的质量是递增的,所以只要输入的砝码超过天平的最大承重能力,后面的输入直接忽略不读,直接进行下一步。这个题的剪枝也有点特殊,除了最基本的边界(当前砝码的重量和大于天平的最大承重能力)之外,还借助了前缀和,因为是从大到小搜索,所以一旦满足 选择前x个砝码的前缀和加上现在的砝码重量总和还比搜索过程中出现的最大重量还要小 ,那么后面就不需要讨论了。
P2969 [USACO09DEC]Music Notes S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
这个题如果按照 问一次时刻就搜索一次答案 做的话,一定超时。这题在一开始想的时候注意到这个问题了,自己的做法是开个数组a,下标表示时刻,a[i]表示在i时刻时敲的音符,然后开了个5e8大小的数组,提交后超内存了,如果这个题的最大的可能时间不超过5e7的话还是能勉强过的。看了题解,知道了可以先记住答案的顺序,然后按照时刻从小到大排序,只搜索一遍,再按照问题的顺序排序,循环输出答案。
这个看了不少资料,题做得相对较少,下周的话基本上就光做题了,再拿出点时间把这周的给补上,当然不会只追求数量的而不按老师的要求去做的,尽可能做吧。