๐ฆ11066: ํ์ผ ํฉ์น๊ธฐ
[์๊ณ ๋ฆฌ์ฆ ํ์ด] ๊ฐ๋๊ท
Reviewed by Kade Kang (devkade12@gmail.com)
Reviewed:: 2024-02-19
๋ฌธ์ ํ์ธํ๊ธฐ
ํ์ด
- Matrix_calcuation-11049 ๋ฌธ์ ์ ๊ฑฐ์ ๋์ผํ ๋ฌธ์ ์ด๋ค.
- ์ด ๋ฌธ์ ์์ ์ฃผ์ํ ์ ์ ์์ํ์ผ์ ๋ง๋ค๋ฉด์ ์ค๋ณต์ ์ผ๋ก ๋ฐ์ํ๋ ๋น์ฉ์ด๋ค.
- C1, C2, C3, C4 = 40, 30, 30, 50 ์ ์๋ก ๋ค์ด๋ณด์.
- ๋ฌธ์ ๋๋ก ํฉ์ณ ๋ณด๋ฉด
- C2 + C3 = 60 = X1
- X1 + C1 = 100 = X2
- X2 + C4 = 150 = X3
- ์ต์ข = X1(C2 + C3) + X2(C1 + C2 + C3) + X4(C1 + C2 + C3 + C4)
- ๋๋ฌธ์ ํด๋น ๋ถ๋ถ์ ์ง์คํด์ ๋ณํํด์ค๋ค.
- 3์ค for๋ฌธ์ Matrix_calcuation-11049 ์ ํ์ด๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋๋ค.
ํ์ด
-
์ด ๋ฌธ์ ๋ 1์๊ฐ์ ๊ณ ๋ฏผํด๋ ์ ํ ๊ฐํผ๋ฅผ ์ก์ง ๋ชปํ๊ฒ ์ด์ ๊ฒฐ๊ตญ https://cocoon1787.tistory.com/318์ ํ์ด๋ฅผ ์ฐธ๊ณ ํ๋ค. ํ์คํ DP ๋ฌธ์ ์ ์ฝํ๋ค๊ณ ๋๊ปด์ง๋ค.
-
dp[n][m] ๋ n ์์ m ๊น์ง์ ๋ฒ์๋ฅผ ํ๋ ฌ ์ฐ์ฐํ์์ ์๋ฏธํ๋ค.
-
3์ค for ๋ฌธ์ ์ฌ์ฉํ์ฌ ํ๋ ฌ ์ฐ์ฐ์ ๋ฒ์, ์์ ์ง์ , ๋ฒ์ ์ฐ์ฐ์ ์ง์ ํด ๊ณ์ฐํ๋ค.
-
i ๋ ํ๋ ฌ์ ๋ฒ์๋ฅผ ์ง์ ํ๋ค. i = 2 ์ผ ๊ฒฝ์ฐ, dp[n][m] ์์ m-n, n๊ณผ m ์ฌ์ด์ ๊ฑฐ๋ฆฌ, ์ฐจ์ด๊ฐ 2๋ผ๋ ๋ป์ด๋ค.
-
j ๋ ํ๋ ฌ์ ์์ ์ง์ ์ ๋งํ๋ค. j = 3, i = 2 ์ธ ๊ฒฝ์ฐ dp[3][5] ๋ก 3์์ ์์ํด์ 5๋ฒ์งธ๊น์ง์ ํ๋ ฌ์ ๊ตฌํ๋ค.
-
mid ๋ ๋ฒ์ ์์์์ ์ค์ง์ ์ธ ์ฐ์ฐ์ ์งํํ๋ค. dp[3][10] ์ ๊ตฌํ๋ค๊ณ ํ๋ฉด mid ๋ 3~10 ์ ๊ฐ์ด๊ณ , ๋ฐ๋ณต๋ฌธ์ ๋๋ฉด์ dp[3][3], dp[3][4], โฆ ๋ฅผ ๊ตฌํ๋ค.
-
์ต์ข ์ ์ผ๋ก๋ dp[1][N] ์ ๊ตฌํ๋ฉด 1~N ๊น์ง์ ํ๋ ฌ ์ฐ์ฐ์ ์ต์๊ฐ์ ๊ตฌํ ์ ์๋ค.
-
ํผ์ ์๊ฐํ ๋ dp๋ก ๋๋์ด ๋ค๊ธฐ๋ ํ์ง๋ง ์ด๋ป๊ฒ ํ์ด์ผ ํ ์ง ๊ฐ์ด ์ค์ง ์์๋ค. ํด๋น ๋ฌธ์ ๋ฅผ ํ์ดํ๋ ๋ฐฉ์์ด ์ดํด๋ฅผ ํ๋๊น ๋๋์ผ ์ ์์์ง๋ง ์ฒด๋์ด ํ์ํ ๊ฒ ๊ฐ๋ค.
-
#include <iostream>
#define endl '\n'
using namespace std;
int T, N;
int Info[501][2];
int dp[501][501];
void Input(){
cin >> N;
for(int i=1; i<=N; i++) {
cin >> Info[i][0];
Info[i][1] = Info[i-1][1] + Info[i][0];
}
}
void Solution(){
while(T--){
Input();
for(int i=1; i<N; i++){
for(int j=1; i+j<=N; j++){
dp[j][i+j] = INT32_MAX;
for(int k=j; k<=i+j; k++){
dp[j][i+j] = min(dp[j][i+j], dp[j][k] + dp[k+1][i+j] + Info[i+j][1] - Info[j-1][1]);
}
}
}
cout << dp[1][N] << endl;
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> T;
Solution();
return 0;
}