AT_abc274_d 总结

发布时间 2023-05-31 20:08:04作者: xiehanrui0817

题目:AT_abc274_d

链接:洛谷AT逐月

题意

  • 给定正整数数组 \(a\) 和整数 \(x,y\),请判断是否有 \(n + 1\) 个点满足(一个坐标可以不止一个点):
    • \(p_1 = (0, 0), p_2 = (A_1, 0), p_{n + 1} = (x, y)\)
    • \(p_i\)\(p_{i + 1}(2 \le i \le n)\) 的距离为 \(a_{i}\)
    • 线段 \(p_ip_{i + 1}\)\(p_{i + 1}p_{i + 2}(1 \le i < n)\)
  • 数据范围:\(1 \le n \le 10^3, 1 \le a_i \le 10, \mid x \mid, \mid y \mid \le 10^4\)

思路

  • 首先有一个暴力 \(DP\),令 \(dp_{i, j, k}\) 表示第 \(i\) 个点能否在 \((j, k)\)\(dp_{i, j, k}\) 转移到 \(dp_{i + 1, j', k'},\)j', k'$ 满足题意要求,最后看 \(dp_{n + 1, x, y}\),空间时间都爆了。

  • 然后我们发现 \(j, k\) 是分开的,若 \(i\) 为偶数,\(x\) 变化,否则 \(y\) 变化,所以令 \(dp_{i, j}\) 表示第 \(i\) 个点变化坐标的那一维能否为 \(j\)\(dp_{i,j}\) 转移到 \(dp_{i + 2, j'}, j' = j + a_{i - 1} 或 j - a_{i + 1}\),若 \(n\) 为奇数,看 \(dp_{n + 1, x} \& dp_{n, y}\),否则看 $dp_{n, x} & dp_{n + 1, y},注意下标可能为负数,需要偏移。

时间复杂度

  • 状态数:\(O(nx)\)
  • 转移数:\(O(nx)\),一次转移 \(O(1)\)
  • 总时间复杂度:\(O(nx)\)