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