HDU 5396 Expression ( 2015 Multi-University Training Contest 9)


感覺自己寫的題解過幾天再看還是太沒什麼大用處,應該有所側重,加粗加黑,跳出這道題,找到這類題目的思維模式。


當時隊友想到了解法。然後我就說對啊對啊。還漏了好多情況呢!就盲目在那裏煽風點火。最棒的助攻應該是詳細展開該題目的思路,每個關鍵的地方都給隊友說明白。尤其是一些數據結構的使用。跟他說這個地方可以用這個,那個地方可以用那個。(啊做什麼事都要果斷一點啊機會轉瞬即逝的啊)


題意:給你n個數字和對應的n-1個符號,讓你找出所有匹配括號的方案,並求出他們的表達式得到的值,求和後mod 1E9 + 7.

題解:

1、i表示當前最右邊的位置,j表示當前最左邊的位置。dp[i][j] = dp[i][k] 操作 dp[k+1][j]. 

2、但是這種做法只適用於 操作= '*'  的時候。dp[i][j] = dp[i][k] * 後面那個表達式能得到的方案個數 +/- dp[k+1][j] * 前面那個表達式能得到的方案個數。用dpnum儲存能得到的方案個數那就是 dpnum[i][j] = dpnum[i][k] * dpnum[k+1][j].

3、還有一個問題就是比如(4+6) × (3+7),先做4+6 再做3+7 和 先做3+7 和再做4+6 是不同噠。所以這裏有一個順序問題,算出來的dp值要乘一個順序,假設是c數組,i表示操作左邊那一堆有幾次操作,j表示操作右邊那一堆有幾個操作,那麼就是c[i][j] = c[i-1][j] + c[i][j-1]


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