π¦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;
}