【SHOI2017】分手是祝愿题解(dp毒瘤)
50分部分分入手
其实有80分
首先考虑
- 倒着扫,遇到有
1 的位置就操作一下
正确性:
-
一个点不会被操作
2 次以上,因为2 次操作相当于没操作 -
操作
i 不会影响到比i 大的数 -
所以从后往前扫,若遇到
1 不操作,那么前面的操作也不会改变这个1 ,所以必须操作
正解
首先若最小步数小于等于
问题在于最小步数大于
容易发现上面那个操作序列是固定的
用一个
然后容易发现最优的操作次数即为这个序列中
所以考虑设
- 如果乱选选到了
0 ,1 的个数会多一个 - 如果乱选选到了
1 ,1 的个数会少一个 - 所以有:
f[i]=\frac inf[i-1]+\frac{n-i}nf[i+1]+1
然后是玄学推式子
- 注意到
f[n]=f[n-1]+1 ,我们把它作为边界条件 -
f[n-1]=\frac{n-1}n f[n-2]+\frac1n f[n]+1 - 将第一个式子带入
-
f[n-1]=\frac{n-1}n f[n-2]+\frac1n f[n-1]+\frac{n+1}n - 移项后处理一下系数得到:
-
f[n-1]=f[n-2]+\frac{n+1}{n-1}
发现这个东西长成这个样子
然后大胆猜想不需要求证,加的这个常数(设为
-
f[i-1]=\frac{i-1}n f[i-2]+\frac{n-i+1}n f[i]+1 - 因为我们猜想
f[i]=f[i-1]+g[i] ,将它带入 -
f[i-1]=\frac{i-1}n f[i-2]+\frac{n-i+1}n f[i-1]+\frac{n-i+1}ng[i]+1 - 移项后处理一下系数:
-
f[i-1]=f[i-2]+\frac{n-i+1}{i-1}g[i]+\frac n{i-1} - 所以有:
g[i-1]=\frac{(n-i+1)g[i]+n}{i-1} - 换个样子:
g[i]=\frac{(n-i)g[i+1]+n}i
然后
接着
dp式子总结
-
f[k]=k -
f[i]=f[i-1]+g[i] -
g[n]=1 -
g[i]=\frac{(n-i)g[i+1]+n}i -