https://www.acmicpc.net/problem/11049
11049번: 행렬 곱셈 순서
첫째 줄에 입력으로 주어진 행렬을 곱하는데 필요한 곱셈 연산의 최솟값을 출력한다. 정답은 231-1 보다 작거나 같은 자연수이다. 또한, 최악의 순서로 연산해도 연산 횟수가 231-1보다 작거나 같
www.acmicpc.net
11066번과 풀이법은 똑같고, 점화식만 조금 바꾸면 AC받을 수 있다.
https://www.acmicpc.net/problem/11066
#include<bits/stdc++.h>
using namespace std;
#define F first
#define S second
pair<int,int> matrix[555];
int dp[555][555];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n; cin>>n;
for(int i=1; i<=n; i++){
int r,c; cin>>r>>c;
matrix[i] = {r,c};
}
for(int i=1; i<=n; i++){
for(int j=1; j<=n-i; j++){
int tmp=987654321;
for(int k=j; k<i+j; k++){
int cost = matrix[j].F*matrix[k].S*matrix[j+i].S;
tmp = min(tmp,dp[j][k]+dp[k+1][i+j] + cost);
}
dp[j][i+j] = tmp;
}
}
cout << dp[1][n];
return 0;
}
'문제 풀이' 카테고리의 다른 글
[c++] 백준 10710 실크로드 (0) | 2023.04.20 |
---|---|
[c++] 백준 2629 양팔저울 (0) | 2023.04.18 |
[c++] (AtCoder Beginner Contest 295) D - Three Days Ago (0) | 2023.04.16 |
[c++] 백준 2109 순회 강연 (0) | 2023.04.14 |
[c++] 백준 2812 크게 만들기 (0) | 2023.04.14 |