最優三角形剖分

#include <algorithm>
#include <algorithm>
#include <iostream>

using namespace std;

#define N 1000
#define INF 100000

int d[N + 1][N + 1], m[N + 1][N + 1];

void optimal_polygon_triangulation(int n) {
    for (int i = 1; i <= (n - 1); i++) d[i][i] = 0;
    for (int s = 1; s <= (n - 2); s++) {
        for (int i = 1; i <= (n - s - 1); i++) {
            int j = i + s;
            d[i][j] = INF;
            for (int k = i; k <= j; k++) {

                d[i][j] = min(d[i][j], d[i][k] + d[k + 1][j] + m[i][k + 1] + m[k + 1][j + 1] + m[j + 1][i]);
            }
        }
    }
}

int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> m[i][j];
        }
    }
    optimal_polygon_triangulation(n);
    cout << d[1][n-1] << endl;
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章