下面是一个树形dp的大致代码,为什么复杂度是O(n2)呢?
void dfs1(int u, int fa) {
f[u][0] = 1;
for (int i = head[u]; i != -1; i = e[i].next) if (e[i].v != fa) {
if (flag[e[i].v]) flag[u] = true;
dfs1(e[i].v, u);
for (int j = sz[u]; j >= 0; --j) {
for (int k = 1; k <= sz[e[i].v]; k++) {
(f[u][j + k] += 1LL * f[u][j] * f[e[i].v][k] % mod) %= mod;
}
}
sz[u] += sz[e[i].v];
}
}
代码就展示了一部分,大概意思就是这样子)