給定一具有n個頂點(從1到n編號)的凸多邊形,每個頂點的權均已知。問如何把這個凸多邊形劃分成n-2個互不相交的三角形,使得這些三角形頂點的權的乘積之和最小?
樣例輸入
5
121 122 123 245 231
樣例輸出12214884
這道題有乙個有趣的性質,如果剖分出的多邊形是最優的,那麼他的子多邊形的剖分也必須是最優的
列舉起點 i,終點 j, 三角形頂點 k (i < k < j)
設dp[i][j]表示多邊形 vi ······· vj 的最優剖分, a[i]為點 i 的權值
動態轉移方程dp[i][j]=max(dp[i][j],dp[i][k]+dp[k][j]+a[i]*a[k]*a[j])
1 #include2 #include3 #include5 #define int long long
6 const int maxn = 55, inf = 0x3f3f3f3f;
7 using namespace std;
8 int n, k, f[maxn][maxn], a[maxn];
10 signed main()
20 }
21 }
22 printf("%lld\n", f[1][n]);
23 return 0;
24 }
區間DP之凸多邊形的三角剖分
給定一具有n個頂點 從1到n編號 的凸多邊形,每個頂點的權均已知。問如何把這個凸多邊形劃分成n 2個互不相交的三角形,使得這些三角形頂點的權的乘積之和最小?第一行 頂點數n n 50 第二行 n個頂點 從1到n 的權值,權值為小於32768的整數。第一行為各三角形頂點的權的乘積之和最小值。5121 ...
凸多邊形的三角剖分
給定一具有 n 個頂點 從 1到 n 編號 的凸多邊形,每個頂點的權均已知。問如何把這個凸多邊形劃分成 n 2個互不相交的三角形,使得這些三角形頂點的權的乘積之和最小?第一行 頂點數 n n 50 第二行 n 個頂點 從 1到 n 的權值,權值為小於 32768 的整數。第一行為各三角形頂點的權的乘...
凸多邊形三角剖分問題
1 凸多邊形的三角剖分 將凸多邊形分割成互不相交的三角形的弦的集合t。2 最優剖分 給定凸多邊形p,以及定義在由多邊形的邊和弦組成的三角形上的權函式w。要求確定該凸多邊形的三角剖分,使得該三角剖分中諸三角形上權之和為最小。凸多邊形三角剖分如下圖所示 設 p v0,v1,vn 是n 1個頂點的多邊形 ...