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 了

posted @ 2022-06-28 10:55  Prean  阅读(16)  评论(0编辑  收藏  举报
var canShowAdsense=function(){return !!0};