Codeforces - 1332D 構造 + 位運算

<Codeforces - 1332D> 構造 + 位運算

http://codeforces.com/problemset/problem/1332/D

題意:

從(1,1)出發到(n,m),只能向右或向下走,每走一步就進行一次按位與,結果是最後這個按位與的最大值。

Bob寫了一個dp算法,但是得到的結果並不是真正的答案。(因爲這個算法有誤)

構造矩陣滿足真正答案與Bod的dp算法得出的值的差值爲輸入的k。

思路:

n *1 和 1 * m 時都不會成立,因爲只有一條到達路徑,dp算出來的就是真正的答案。

2 * 2時dp得到的結果也是真正的答案,因爲僅有兩條路徑,dp算的也恰好是較大的那條路徑的按位與。

那麼考慮2 * 3矩陣的情況:

比如,當k = 10,即二進制下的1010時,有如下構造:

先讓c = 0,保證最大路徑不是abcf(若abcf爲所求路徑原來的dp就是正確的了)

不妨設f = k,

b比k多一位且最高位是1其餘爲0是爲了保證b&k = 0;

d = k爲了保證d&k = k&k = k;

這樣構造a = e = b + k,就能實現a&b&e&f = b&k = 0,a&d&e&f = d&k = k

AC代碼:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章