1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | ///* #include <stdio.h> int arr[505][3] = { 0 }; long long dp[505][505] = { 0 }; int main() { int n; scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d %d", &arr[i][1], &arr[i][2]); } for (int d = 1; d < n; d++) { for (int i = 1; i + d <= n; i++) { long long minV = 1000000000000; for (int mid = i; mid + 1 <= i + d; mid++) { long long tmp = dp[i][mid] + dp[mid + 1][i + d] + arr[i][1] * arr[mid][2] * arr[i + d][2]; if (minV > tmp) minV = tmp; } dp[i][i + d] = minV; } } printf("%lld", dp[1][n]); } | cs |
'알고리즘 > DP' 카테고리의 다른 글
2602 돌다리 건너기 (0) | 2019.07.12 |
---|---|
2352 반도체 설계 (0) | 2019.07.11 |
2688 줄어들지 않아 (0) | 2019.07.10 |
9084 동전 (0) | 2019.07.09 |
1010 다리놓기 (0) | 2019.07.09 |