ARC080F口胡
哥德巴赫猜想
看到这个数据范围可以先想一个区间 DP:
设 \(f[l,r]\) 表示将 \([x_l,x_r]\) 这个区间全部翻转成背面朝上,\(g[l,r]\) 表示将这个区间全部翻转成正面朝上。边界条件 \(f[i,i]=2,g[i,i]=0\)。
设 \(h[n]\) 表示将一个长度为 \(n\) 的区间翻转所需的最少步数。那么有转移方程:
\[g[l,r]=\min_{i=l}^{r-1}g[l,i]+g[i+1,r]+h[x_{i+1}-x_i]
\]
\[f[l,r]=\min(\min_{i=l}^{r-1}f[l,i]+f[i+1,r],g[l,r]+h[x_r-x_l])
\]
DP 的部分相当平凡,来考虑 \(h\) 怎么办。
如果 \(n\) 是质数,那么有 \(h[n]=1\),如果 \(n\) 是非 \(2\) 偶数,那么有 \(h[n]=2\),否则有 \(h[n]=3\)。
原因是哥德巴赫猜想:任意大于 \(2\) 的整数都能被写成三个质数之和。至少在 \(10^{300}\) 以内这个都是成立里的。
如果一个偶数 \(n\) 能被写成三个质数之和,那么三个质数一定包含 \(2\),偶数减 \(2\) 还是偶数,所以偶数能被写成两个质数之和。
考虑差的情况。对于偶数一定不优,对于奇数只有 质数+质数-质数 这种可能,一定被哥猜吊打。
特别地,\(h[1]=INF,h[0]=0\)。
复杂度低一点儿的做法:
设 \(g[n]\) 为将 \([1,x_n]\) 全部反转成背面的最少步数,\(f[l,r]\) 的定义和上面类似,但是只需要考虑 \(f[l,r]=\sum_{i=l}^{r-1}h[x_{i+1}-x_i]+h[x_r-x_l]\) 即可。
但是实际上都要跑一个 1e7 的线性筛
可能是出题人不会造数据然后把 2 给 ban 了