大学ACM第八周心得
写在前面:
dp要设置好初始状态
MLE不一定是数组,结构体之类开大了,也可能是递归调用太多内存
看清楚有没有多组数据
USACO题目
- Training 2.2.2 Subset Sums
01背包,总容量为(1+2+...+n)/2
- Training 2.2.3 Runaround Numbers
我直接暴力枚举,暴力判断了。看了一下,还可以用搜索构造,至多构造到九位数,枚举每一位可以填什么数,以及下一位是否指向一个空位,所填的是最后一个空位,那么你一定要让其指向第一位。
- Training 2.3.1 The Longest Prefix
一般做法是dp,可以配合trie也可以配合set,如果从前往后枚举字符串位置,从当前位置往前截一段(从集合里最大的长度开始截)截后的字符串是合法的话,那么当前也是合法的。用ac自动机也可以做,原理是一样的。
- Training 2.3.2 Cow Pedigrees
设dp【i】【j】表示i个点小于等于j层的方案数,那么最终我们所需的答案就是dp【n】【k】-dp【n】【k-1】,枚举一个t,表示分t个点给左子树,剩下i-t-1(除去当前的根)分给右子树,然后用乘法原理
- Training 2.3.3 Zero Sum
就暴搜,九位数就八个位置要确定,O(2^8)
- Training 2.3.4 Money Systems
裸的背包
- Training 2.3.5 Controlling Companies
暴力搞也能过,因为数据范围很小;还可以用有点像并查集的做法,就把关系链建好,然后从父亲开始找儿子;还看到用网络流的(而我并不会)
这周学的算法:AC自动机,主席树,种类并查集,带权并查集,左偏树,划分树
其实大多也只打了模板题,还不太会应用