ZOJ 1602 Multiplication Puzzle (DP)

来源:互联网 发布:手机淘宝怎么没有开店 编辑:程序博客网 时间:2024/05/19 04:05

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1602

用D[i][j]表示从i到j的最小值,假设t为最后一个乘积点,则D[i][j] = min{D[i][t] + D[t][j] + a[i] * a[t] * a[j]} (i < t < j)

#include <iostream>#include <vector>#include <algorithm>#include <queue>#include <string.h>#include <stdio.h>using namespace std;#define MAXINT 0x7FFFFFFFint main(){int N, a[100];int matrix[100][100];while (cin >> N){for (int i = 0; i < N; i++)cin >> a[i];memset(matrix, 0, sizeof(matrix));int dist = 2;while (dist < N){for (int i = 0; i + dist < N; i++) // [i, i+dist]{int min = MAXINT;for (int j = i + 1; j <= i + dist - 1; j++){int tmp = matrix[i][j] + matrix[j][i + dist] + a[i] * a[j] * a[i + dist];if (tmp < min)min = tmp;}matrix[i][i + dist] = min;}dist++;}cout << matrix[0][N - 1] << endl;}}


原创粉丝点击