[DP记录]P7529 [USACO21OPEN] Permutation G
command_block
2021-10-21 07:38:32
模拟赛搬了这个题……
**题意** : 给定二维平面上 $n$ 个点.
统计有多少个 $1\sim n$ 的排列 $P$ 满足 :
将前三个点连在一起后,在之后的点中,向在排列中在它前面的点连边,有且只有三个不会和之前的线段相交,随后只保留这三条边。
数据保证三点不共线,答案对 $10^9+7$ 取模。
$n\leq 40$ ,时限$\texttt{1s}$。
------------
手玩不难发现,加点过程中,凸包一定是个三角形,而且内部是个三角剖分。
加点可以分为两类 :
- 外加:不一定合法,加点后凸包要是三角形才合法。
- 内加:由于内部是三角剖分,一定合法。
不难发现,我们只需要关注凸包上的三个点,以及内部没有被加的点数。
记 $dp[i][j][k][c]$ 表示三角形 $(i,j,k)$ 内部还有 $c$ 个点没加的方案数,转移时枚举外加的点,将新框住的点加入 $c$ 中。
这需要预处理 $s[i][j][k]$ 表示三角形 $(i,j,k)$ 内部的点数,暴力即可。
复杂度为 $O(n^5)$。
```cpp
```