大学ACM第八周心得

写在前面:

  1. dp要设置好初始状态

  2. MLE不一定是数组,结构体之类开大了,也可能是递归调用太多内存

  3. 看清楚有没有多组数据


USACO题目

  1. Training 2.2.2 Subset Sums

01背包,总容量为(1+2+...+n)/2

  1. Training 2.2.3 Runaround Numbers

我直接暴力枚举,暴力判断了。看了一下,还可以用搜索构造,至多构造到九位数,枚举每一位可以填什么数,以及下一位是否指向一个空位,所填的是最后一个空位,那么你一定要让其指向第一位。

  1. Training 2.3.1 The Longest Prefix

一般做法是dp,可以配合trie也可以配合set,如果从前往后枚举字符串位置,从当前位置往前截一段(从集合里最大的长度开始截)截后的字符串是合法的话,那么当前也是合法的。用ac自动机也可以做,原理是一样的。

  1. Training 2.3.2 Cow Pedigrees

设dp【i】【j】表示i个点小于等于j层的方案数,那么最终我们所需的答案就是dp【n】【k】-dp【n】【k-1】,枚举一个t,表示分t个点给左子树,剩下i-t-1(除去当前的根)分给右子树,然后用乘法原理

  1. Training 2.3.3 Zero Sum

就暴搜,九位数就八个位置要确定,O(2^8)

  1. Training 2.3.4 Money Systems

裸的背包

  1. Training 2.3.5 Controlling Companies

暴力搞也能过,因为数据范围很小;还可以用有点像并查集的做法,就把关系链建好,然后从父亲开始找儿子;还看到用网络流的(而我并不会)


这周学的算法:AC自动机,主席树,种类并查集,带权并查集,左偏树,划分树

其实大多也只打了模板题,还不太会应用

原文地址:https://www.cnblogs.com/71-111/p/14136355.html