Optimized Triangulation

#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;
}

 

Published 98 original articles · won praise 5 · views 10000 +

Guess you like

Origin blog.csdn.net/chengsilin666/article/details/104093633