多邊形遊戲(DP)

2022-03-03 18:58:20 字數 1602 閱讀 7121

多邊形遊戲是乙個單人玩的遊戲,開始時有乙個由n個頂點構成的多邊形。每個頂點被賦予乙個整數值,每條邊被賦予乙個運算子 "+" 或 "*"。所有邊依次用整數從1到n編號。

遊戲第1步,將一條邊刪除。

隨後的n-1步按以下方式操作:

(1)選擇一條邊e以及由e連線著的兩個頂點v1v2

(2)用乙個新的頂點取代邊e以及由e連線著的兩個頂點v1v2。將由頂點v1v2的整數值通過邊e上的運算得到的結果賦予新頂點。

最後,所有邊都被刪除,遊戲結束。遊戲的得分就是所剩頂點上的整數值。

問題:對於給定的多邊形,計算最高得分w( -231

<w< 231 )。

輸入的第一行是單獨乙個整數n( 3 ≤n≤ 18 ),表示多邊形的頂點數(同時也是邊數)。接下來第n行,每行包含乙個運算子("+"或"*")和乙個整數v[i]( -10 <v[i] < 10 ),分別表示第i條邊所對應的運算子和第i

個頂點上的數值。

輸出只有乙個整數,表示最高得分w

3+ 2

* 3+ 1

9

#include#include

#include

#define max 102

using

namespace

std;

intv[max];

char

op[max];

intn,minf,maxf;

int m[max][max][2

];void minmax(int i,int s,int

j)

else

}}int

polymax()

for(int j=2; j<=n; j++)

for(int i=1; i<=n; i++)

for(int s=1; s)

int temp=m[1][n][1

];

for(int i=2; i<=n;i++)

if(temp1]) temp=m[i][n][1

];

return

temp;

}int

main()

cout

<< polymax()

}

多邊形遊戲

07 多邊形遊戲 描述乙個多邊形,開始有n個頂點。每個頂點被賦予乙個正整數值,每條邊被賦予乙個運算子 或 所有邊依次用整數從1到n編號。現在來玩乙個遊戲,該遊戲共有n步 最後,所有邊都被刪除,只剩乙個頂點,遊戲結束。遊戲得分就是所剩頂點上的整數值。那麼這個整數值最大為多少?關於輸入 第一行為多邊形的...

多邊形遊戲

該問題用動態規劃中的最優子結構來解決,當把一條邊去除除后,再把它拉直,那麼這個問題就最後可以變成一條鏈。那麼就和以前寫的矩陣連乘問題和凸多邊形最優三角剖分相似,最後要求的是這個鏈的表示式算式結果的最大值。於是我們就可以想到可以用陣列p i j 來表示從點i開始,鏈長為j的算術表示式的最大值,用v i...

多邊形 區間dp

題意簡單來說就是 給你乙個環,斷掉一條邊使其成為乙個鏈,用這個鏈跑dp,求最大得分。首先這不是一道板子題。跟板子區別如下 1.多了一重迴圈,最開始要求斷掉一條邊,但是我們不知道要斷掉哪一條邊,因此需要迴圈一遍來比較。2.計算方法有加法有乘法,而且資料有正數有負數。這兩個條件任意乙個都不足懼,但是如果...