关于复杂度的疑惑
查看原帖
关于复杂度的疑惑
1063026
P2441MPM2.4楼主2025/7/30 13:37

本来打算先写暴力 DP 的,然后过了。

这是 check 的代码:

bool check(int k) {
	for (int i = 0; i <= sz; ++i) for (int j = 0; j <= k; ++j) f[i][j] = 0;
	f[0][0] = 1;
	int tot = 0;
	for (int i = 0; i < sz; ++i) for (int j = 0; j <= k; ++j) {
		if (!f[i][j]) continue;
		int c = cnt[i + 1];
		for (int p = max(c + j - k, 0); p <= min(j, c); ++p) if (j + c - p * 2 >= 0 && j + c - p * 2 <= k)
			f[i + 1][j + c - p * 2] = 1, prv[i + 1][j + c - p * 2] = p, ++tot;
	}
	return f[sz][0];
}

很疑惑,然后试图卡掉自己,感觉卡不掉。

瞪了一眼发现 i,pi,p 的总数就是 O(n)\mathcal{O}(n) 的啊?那复杂度不就是 O(nk)\mathcal{O}(nk) 的么?这就是对的吧(

求解答。

2025/7/30 13:37
加载中...