1 const int maxn = 10000; 2 #define _for(i,a,b) for(int i = (a);i < (b);i ++) 3 typedef long long ll; 4 5 6 class Solution 7 { 8 public: 9 int t[60][60]; 10 int s[60][60]; 11 int weight[60]; 12 int N; 13 int get_weight(const int a, const int b, const int c) 14 { 15 return weight[a] * weight[b] * weight[c]; 16 } 17 int minScoreTriangulation(vector<int>& A) 18 { 19 int N = A.size(); 20 _for(i,0,A.size()) 21 weight[i] = A[i]; 22 int i,r,k,j; 23 int min; 24 25 for (i = 1; i < N; i++) 26 { 27 t[i][i] = 0; 28 } 29 30 for (r = 2; r < N; r++) 31 { 32 for (i = 1; i < N-r+1; i++) 33 { 34 j = i + r -1; 35 min = INT_MAX; 36 for (k = i; k < j; k++) 37 { 38 t[i][j] = t[i][k] + t[k+1][j] + get_weight(i-1,k,j); 39 if (t[i][j] < min) 40 { 41 min = t[i][j]; 42 s[i][j] = k; 43 } 44 } 45 t[i][j] = min; 46 } 47 } 48 return t[1][N-1]; 49 } 50 };
多边形三角剖分,DP走起来
原文地址:https://www.cnblogs.com/Asurudo/p/10812281.html
时间: 2024-12-31 06:18:59