多邊形遊戲(區間動態規劃)

2021-09-24 02:21:53 字數 2094 閱讀 4021

就是乙個區間動態規劃,為了處理環狀結構,乙個好的想法是把整個頂點和邊的序列在後面再複製一遍。可以比較簡化**實現的複雜度。

#include

using

namespace std;

const

int maxn =

105;

struct calseq};

bool

operator

<

(const calseq &l ,

const calseq &r )

int n, val[maxn]

;char op[maxn]

;calseq dpmax[maxn]

[maxn]

, dpmin[maxn]

[maxn]

;string getvaltostring (

long

long

int x )

if( x <0)

while

( x>0)

return ret;

}void

input()

}}void

copyseq()

}void

init()

}long

long

intcaldpmax

(int l ,

int r )

;// 計算 val[l] 到 val[r] 的所有元素以某種順序結合的能得到的最大值

long

long

intcaldpmin

(int l ,

int r )

;// 計算 val[l] 到 val[r] 的所有元素以某種順序結合的能得到的最小值

intmain()

ans.

print()

;return0;

}long

long

intcaldpmax

(int l ,

int r )

int best_k =-1

;long

long

int best_val ;

string seql , seqr ;

for(

int k=l; k

else

if( temp <

caldpmin

(l,k)

*caldpmax

(k+1

,r))

if( temp <

caldpmax

(l,k)

*caldpmin

(k+1

,r))

if( best_k==-1

|| best_val < temp )}}

if( op[best_k]

=='+'

)else

return best_val;

}long

long

intcaldpmin

(int l ,

int r )

int best_k =-1

;long

long

int best_val ;

string seql , seqr ;

for(

int k=l; k

else

if( temp >

caldpmin

(l,k)

*caldpmax

(k+1

,r))

if( temp >

caldpmax

(l,k)

*caldpmin

(k+1

,r))

if( best_k==-1

|| best_val > temp )}}

if( op[best_k]

=='+'

)else

return best_val;}/*

53 * -2 + 1 * -4 + 5 *

*/

動態規劃 多邊形遊戲

已知乙個n邊的多邊形,在n個頂點上都有乙個整數,在n條邊上都存在 或 號。遊戲開始時,撤掉一條邊。剩下的就會變成由n個頂點,n 1條邊所組成的鏈條。將其中兩個相鄰的頂點按之間的運算子進行運算,這兩個頂點和這條邊被替換為運算結果,鏈條被削減為n 1個頂點,n 2條邊。如此反覆直到最後只剩下乙個點。多邊...

動態規劃 多邊形遊戲

1 問題描述 給定n個頂點的多邊形,每個頂點標有乙個整數,每條邊上標有 加 或是 乘 號,並且n條邊按照順時針 依次編號為1 n。下圖給出了乙個n 4個頂點的多邊形。遊戲規則 1 首先,移走一條邊。2 然後進行下面的操作 選中一條邊e,該邊有兩個相鄰的頂點,不妨稱為v1和v2。對v1和v2頂點所標的...

動態規劃(DP)之多邊形遊戲問題

問題描述 多邊形遊戲是乙個單人玩的遊戲,開始時有乙個由n個頂點構成的多邊形。每個頂點被賦予乙個整數值,每條邊被賦予乙個運算子 或 所有邊依次用整數從1到n編號。遊戲第1步,將一條邊刪除。隨後n 1步按以下方式操作 1 選擇一條邊e以及由e連線著的2個頂點v1和v2 2 用乙個新的頂點取代邊e以及由e...