一、題目
給出乙個多邊形,滿足:
1. 每個頂點是乙個數值
2. 每條邊是乙個符號
我們將某個邊斷開,形成一條數值和符號組成的鏈,然後計算這條鏈的值。
1· 可以選擇任意一條邊斷開。
2.求鏈的值時,可以不必按運算子的優先順序順序,任意選擇先後
題目的要求是得到最大的值
二、示例
三、分析
1. 如上圖,我們將圖的資訊儲存如下:
頂點數:real_size = 3
頂點:v[3] =
邊: op[3] =
2. 假如我們從 邊i 斷開,則形成了鏈
v[i],op[i+1],v[i+1],op[i+2] .....v[i+s-1],op[s],v[i+s]...op[i-1],v[i-1]
計算得到其最大值,題目要求的最大值,也就是分別將每個邊斷開後,能得到的每條鏈的最大值中的最大的。
3. 為了計算方便,我們記:
p[i,j] 表示從頂點i開始,包括j個頂點的鏈
m[i,j,0]表示這條鏈的最小值
m[i,j,1]表示這條鏈的最大值
這樣 i 從 0到real_size 的所有 m[i,real_size,1]中最大的就是題目要的結果
4. 將p[i,j]在op[i+s]處斷開,則形成兩條鏈p[i,s],和p[i+s,j-s]
得到p[i,s]和p[i+s,j-s]的最小值和最大值,就可以得到p[i,j]在s處斷開的最大值最小值
當s 從1開始到 j-1,分別得到 對應的斷開方法的最值,從這些最值中選擇最小和最大的作為m[i,j,0]和m[i,j,1]
四、**如下
動態規劃 多邊形遊戲
已知乙個n邊的多邊形,在n個頂點上都有乙個整數,在n條邊上都存在 或 號。遊戲開始時,撤掉一條邊。剩下的就會變成由n個頂點,n 1條邊所組成的鏈條。將其中兩個相鄰的頂點按之間的運算子進行運算,這兩個頂點和這條邊被替換為運算結果,鏈條被削減為n 1個頂點,n 2條邊。如此反覆直到最後只剩下乙個點。多邊...
動態規劃 多邊形遊戲
1 問題描述 給定n個頂點的多邊形,每個頂點標有乙個整數,每條邊上標有 加 或是 乘 號,並且n條邊按照順時針 依次編號為1 n。下圖給出了乙個n 4個頂點的多邊形。遊戲規則 1 首先,移走一條邊。2 然後進行下面的操作 選中一條邊e,該邊有兩個相鄰的頂點,不妨稱為v1和v2。對v1和v2頂點所標的...
多邊形遊戲(區間動態規劃)
就是乙個區間動態規劃,為了處理環狀結構,乙個好的想法是把整個頂點和邊的序列在後面再複製一遍。可以比較簡化 實現的複雜度。include using namespace std const int maxn 105 struct calseq bool operator const calseq l ...