P2789 (DP)
P2789 (DP)
设\(f[i][l]\)表示有i条直线时,交点数为\(l\)的情况是否存在。存在则为1。
当有\(i\)条直线时,枚举有平行的直线数字\(j\)(多余的不管可以平行也可以不平行),以及交点数字\(k\)。得到转移方程:
\(f[i][j*(i-j)+k] |= f[i-j][k];\)
即,如果\(f[i-j][k]\)存在,那么\(f[i][j*(i-j)+k]\)存在。
就是说,在\(i-j\)条直线的情况下再加入\(j\)条直线,这样会多产生\(i*(i-j)\)个交点。
从小到大枚举\(1-i\)条直线,再枚举其中\(j\)条直线平行的情况,最后枚举交点个数\(k\)。
其中\(k\)的个数等于 \(n*(n-1)/2\)。
共计时间复杂度为\(O(n^4)\)