如圖所示,用頂點的逆時針序列表示凸多邊形,即p=表示具有n條邊的凸多邊形。
給定凸多邊形p,以及定義在由多邊形的邊和弦組成的三角形上的權函式w。如圖所示劃分,要求確定該凸多邊形的三角剖分,使得該三角形上的勸之和最小。
解析:若凸(n+1)邊形p=的最優剖分t包含三角形v0vkvn,1<=k<=n-1,則t的權為3個部分的和,三角形v0vkvn的權,子多邊形和的權之和。定義t[i][j],1<=i=1時,凸子多邊形至少有3個頂點,t[i][j]應為t[i][k]的值加上t[k+1][j]的值再加上vi-1vkvj的權值(這裡t[k+1][j]之所以為k+1這裡是以邊計數的)。至於權值w函式,定義為三角形三個頂點的權值乘積。
即w(vi-1vkvj
)=w[i-1]*w[k]*w[j].狀態轉移方程如下:
**實現:
# -*-coding:utf-8 -*-
while true:
try:
n=int(raw_input())
w=map(int,raw_input().split())
t=[[0 for i in range(n+1)] for j in range(n+1)]
for i in range(1,n+1):
for j in range(i+1,n+1):
for k in range(i,j):
if i-1!=k and k!=j:
r=w[i-1]*w[k]*w[j]
else:r=0
if t[i][j]==0:
t[i][j]=t[i][k]+t[k+1][j]+r
else:t[i][j]=min(t[i][j],t[i][k]+t[k+1][j]+r)
ans=t[1][n]
print t,ans
except:
break
凸多邊形最優三角剖分
問題描述 使用動態規劃演算法解凸多邊形最優三角剖分問題,具體來說就是,依據遞迴式,按照順序求得子問題,使得該三角剖分中諸三角形上權之和為最小。輸入形式 在螢幕上輸入凸多邊形頂點個數和頂點座標。輸出形式 最優三角剖分後的三角形頂點。樣例輸入 8 26 0 20 0 10 10 0 22 12 27 2...
4 5 凸多邊形最優三角剖分
動態規劃法解凸多邊形最優三角剖分 1 凸多邊形的三角剖分 將凸多邊形分割成互不相交的三角形的弦的集合t。2 最優剖分 給定凸多邊形p,以及定義在由多邊形的邊和弦組成的三角形上的權函式w。要求確定該凸多邊形的三角剖分,使得該三角剖分中諸三角形上權之和為最小。定義乙個頂點到其他頂點的權 weights ...
凸多邊形最優三角剖分問題
參考書籍 演算法設計與分析 王曉東 動態規劃 1.問題描述 注 是所有的三角形的權值之和,不是只計算邊和弦的權值之和 2.分析 3.編碼實現 author 胡家威 createtime 2011 11 10 下午12 31 16 description 凸多邊形的最優三角剖分 packageex2 ...