λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Algorithm πŸ§‘πŸ»‍πŸ’»/λ°±μ€€(BOJ)

[λ°±μ€€,c++] 11049번 - ν–‰λ ¬ κ³±μ…ˆ μˆœμ„œ

by dkswnkk 2021. 10. 26.
 

11049번: ν–‰λ ¬ κ³±μ…ˆ μˆœμ„œ

첫째 쀄에 μž…λ ₯으둜 주어진 행렬을 κ³±ν•˜λŠ”λ° ν•„μš”ν•œ κ³±μ…ˆ μ—°μ‚°μ˜ μ΅œμ†Ÿκ°’μ„ 좜λ ₯ν•œλ‹€. 정닡은 231-1 보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜μ΄λ‹€. λ˜ν•œ, μ΅œμ•…μ˜ μˆœμ„œλ‘œ 연산해도 μ—°μ‚° νšŸμˆ˜κ°€ 231-1보닀 μž‘κ±°λ‚˜ κ°™

www.acmicpc.net

#include <iostream>
#define INF 1e9


/*
 (i<=k<=j-1)
 dp[i][j]=min(dp[i][k]+dp[k+1][j]+d[i-1]*d[k]*d[j])
 */

int dp[501][501];
int r[501],c[501];
using namespace std;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    int N; cin>>N;

    for (int i=0; i<N; i++){
        dp[i][i]=0;
    }

    for(int i=0; i<N; i++){
        cin>>r[i]>>c[i];
    }

    for(int cnt=1; cnt<N; cnt++){
        for(int i=0; i<=N-cnt; i++){
            int j=i+cnt;
            dp[i][j]=INF;
            for(int k=i; k<j; k++){
                dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+r[i]*r[k+1]*c[j]);
            }
        }
    }
    cout<<dp[0][N-1];
}

λŒ“κΈ€