日记
窝补药军训啊啊啊啊啊啊啊啊啊
总之就是非常神奇。
总共分 3 步:
- 先把第 1 行全变成 0。
- 对于第 2∼n 行,如果这行超过了 2n,又有 ri≤4n,所以我们必须要把第 i 行取反。
- 对于第 1∼n 列同理。
最后判断一下是否行的和和列的和符合题意就是了。
先把 ai 全部 −1。
我们发现,对于一个群攻,在 min>0 的时候是会执行的。对于一个单攻,一定是对 max 操作的。于是我们有 O(nmh2) dp:设 dpi,j,k 表示还剩 i 次操作,当前的 min=k,∑i=1nai−k=j。转移如下:
- 对于一个单攻,给最大的执行。dpi,j,k←dpi−1,j−1,k×(1−p)。特别的,对于 j=0,有 dpi,0,k←dpi−1,n−1,k−1×(1−p),表示最小值变成了 k−1,当然也可以选择不操作。
- 对于一个群攻,在 k>0 时一定执行,dpi,j,k←dpi−1,j,k−1×p,反之不执行,dpi,j,k←dpi−1,j,k×p。
但是我们发现 O(nmh2) 显然跑不过,于是我们需要优化。
我们发现,在 j>n 时候,一定会操作单攻。于是我们设 dp1i,j 表示在前 i 次攻击里有 j 次单攻的概率。转移是平凡的。
最后把两种 dp 合并起来就是了。
我似乎是一事无成的。
那又如何?