該問題用動態規劃中的最優子結構來解決,當把一條邊去除除后,再把它拉直,那麼這個問題就最後可以變成一條鏈。那麼就和以前寫的矩陣連乘問題和凸多邊形最優三角剖分相似,
最後要求的是這個鏈的表示式算式結果的最大值。
於是我們就可以想到可以用陣列p[i][j]來表示從點i開始,鏈長為j的算術表示式的最大值,用v[i]儲存運算元,op[i]儲存操作符。如果這條鏈的最後一次合併運算在op[i+s]處發生(1≤s≤j-1),則可在op[i+s]處將鏈分割為2個子鏈p[i][s]和p[i+s][j-s]。這樣再按照以前解決動態規劃題目時的思路,就可以解決問題了。
由於有兩種運算子+和x,並且運算元可能存在負數,考慮兩個負數相乘的結果可能比兩個正數要大,所以我們同時還需要記錄每個鏈的最大和最小值,然後判斷,如果操作符為+的話,只需要兩個鏈的最大值相加即可,如果操作符是x的話,那麼必須把各種情況考慮進來,然後再求出最大值。
設m1是對子鏈p[i][s]的任意一種合併方式得到的值,而a和b分別是在所有可能的合併中得到的最小值和最大值。m2是p[i+s][j-s]的任意一種合併方式得到的值,而c和d分別是在所有可能的合併中得到的最小值和最大值。
因此有a<=m1<=b,c<=m2<=d
(1)當op[i+s]=』+『時,顯然有a+c<=m<=b+d
(2)當op[i+s]=』*'時,有min<=m<=max
動態規劃過程需要o(n^ 3)計算時間,總的時間複雜度為o(n^3)
void
minmax
(int n, int i, int s, int j, int& minf, int& maxf)
//求最大值和最小值
else
//乘法運算}}
多邊形遊戲
07 多邊形遊戲 描述乙個多邊形,開始有n個頂點。每個頂點被賦予乙個正整數值,每條邊被賦予乙個運算子 或 所有邊依次用整數從1到n編號。現在來玩乙個遊戲,該遊戲共有n步 最後,所有邊都被刪除,只剩乙個頂點,遊戲結束。遊戲得分就是所剩頂點上的整數值。那麼這個整數值最大為多少?關於輸入 第一行為多邊形的...
多邊形遊戲問題
問題描述 多邊形遊戲是乙個單人玩的遊戲,開始時有乙個由n個頂點構成的多邊形。每個頂點被賦予乙個整數值,每條邊被賦予乙個運算子 或 所有邊依次用整數從1到n編號。遊戲第1步,將一條邊刪除。隨後n 1步按以下方式操作 1 選擇一條邊e以及由e連線著的2個頂點v1和v2 2 用乙個新的頂點取代邊e以及由e...
多邊形遊戲(博弈)
問題描述 多邊形遊戲是乙個雙人遊戲。遊戲在乙個有n個頂點的凸多邊形上進行,這個凸多邊形的n 3條對角線將多邊形分成n 2個三角形,三角形中的乙個被染成黑色,其餘是白色。雙方輪流進行遊戲,當輪到一方時,他必須沿著畫好的對角線,從多邊形上切下乙個三角形。切下黑色三角形的一方獲勝。輸入多組測試資料。每組測...