例項1:(usaco a game)
有一列數排列, 甲乙兩個人每次可以從頭或者從末尾取乙個數, 問甲乙在採取最優策略的基礎下分別分別得分是多少?
這個題帶有一絲區間的味道, 因此我們定義dp[i][j]為先取者所能取得的得分, 然後我們思考對於當前的i-j的序列甲先取的話有兩種取法, 即1.從頭取, 2.從末尾取, 1對應dp[i+1][j] 如果dp[i][j]是甲能取得的最大分數的話, 那麼甲取完乙個數字之後轉化到的子問題dp[i+1][j]就是乙所能獲得的最大分數, 同理可得dp[i][j-1]也為乙所能獲得的最大分數, 如果我們預處理sum[i][j]為序列i-j的和, 那麼dp[i][j] = sum[i][j] - min(dp[i+1][j], dp[i][j-1]), 初識條件為dp[i][i] = num[i];
例項二:(bestcoder kk's number 71)
題目大意是有n個數兩個玩家a b , 每次乙個玩家會從n個數中取一些數,他的得分為這些數中的最小值,玩家採取的策略是使自己的得分減去對手的得分後最大,在這種情況下先取的玩家減去對手的得分是多少?對於這個問題我們可以考慮玩家肯定拿盡可能大的數, 因此我們將n個數從小到大排列, 定義f[i]為前i個數 先取者得分-後取者得分的最大值,現在想像有i個數, 先取者取第j+1-i個數那麼f[j]就變成了後取者-先取者的最大分數, 因此 f[i] = max(a[j+1] - f[j]).。。
以上是自己的一些見解, 有不當之處還望指出。。
博弈類模版,總結
博弈類的核心在於獲取sg函式。對於乙個局面,若至少有一種操作使它變為p局面,則它是n局面 對於乙個局面,無論如何操作都使它變為n局面,則它是p局面 將遊戲中間的狀態看做頂點,將狀態的轉移看做邊 sg v 定義為 沒有出現在中的最小自然數 初始節點 必須是p節點 沒有出邊,sg 0.若v有邊指向某sg...
計蒜客 雙人遊戲 dp
題目鏈結 題解 這道題想了半天沒想到好的方法,看了答案的 後才恍然大悟。從左上角和右上角出發最終會形成2條路徑,這2條路徑肯定是相交的。要使積分和最大,交點肯定只有1個 解此題的關鍵所在 理由 假設2條路徑已經交於1點了,由於一條路只能往右 下 發展,另一條路只能往左 下 發展,所以如果有多個交點的...
狀壓 博弈dp
傳送門 題目大意 遊戲的雙方能在 1 n 之間選擇乙個數加到sum上,每個數只能選擇一次。誰先將sum 變得 max 誰就贏了。現在問你,給定 n sum.先手是否能贏 兩方採取最優策略 n 20 max 300 思路 很容易發現n 很小,可以直接狀態壓縮。但是有乙個問題。直觀的想法是開二維陣列,這...