baekjoon 20260124
This commit is contained in:
parent
9aa4b28a45
commit
b6350b53e0
18
code_study/Baekjoon/c/13752.c
Normal file
18
code_study/Baekjoon/c/13752.c
Normal file
@ -0,0 +1,18 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int seq[100];
|
||||
|
||||
void histogram(int n) {
|
||||
for(int i=0; i<n; i++) printf("=");
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
int main() {
|
||||
int N;
|
||||
scanf("%d",&N);
|
||||
|
||||
for(int i=0; i<N; i++) scanf("%d",&seq[i]);
|
||||
for(int i=0; i<N; i++) histogram(seq[i]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -1,23 +1,54 @@
|
||||
# import sys
|
||||
# input = sys.stdin.readline
|
||||
|
||||
# INF = float("inf")
|
||||
# N = int(input())
|
||||
# size = [list(map(int, input().split())) for _ in range(N)]
|
||||
# dp = [[0]*N for _ in range(N)]
|
||||
|
||||
# for length in range(2, N+1) :
|
||||
# for start in range(N-length+1) :
|
||||
# end = start + length - 1
|
||||
# dp[start][end] = INF
|
||||
|
||||
# for k in range(start, end) :
|
||||
# left_cost = dp[start][k]
|
||||
# right_cost = dp[k+1][end]
|
||||
# merge_cost = size[start][0]*size[k][1]*size[end][1]
|
||||
# current_cost = left_cost + right_cost + merge_cost
|
||||
|
||||
# dp[start][end] = min(dp[start][end], current_cost)
|
||||
|
||||
# print(dp[0][N-1])
|
||||
|
||||
import sys
|
||||
input = sys.stdin.readline
|
||||
|
||||
N = int(input())
|
||||
matrix_size = [[0,0]] + [list(map(int, input().split())) for _ in range(N)]
|
||||
matrix = [list(map(int, input().split())) for _ in range(N)]
|
||||
|
||||
INF = float("inf")
|
||||
dp = [[INF]*(N+1) for _ in range(N+1)]
|
||||
for i in range(1,N+1) :
|
||||
dp[i][i] = 0
|
||||
dp = [[0]*N for _ in range(N)]
|
||||
kk = [[0]*N for _ in range(N)]
|
||||
|
||||
for l in range(2,N+1) :
|
||||
for left in range(1,N) :
|
||||
right = left + l - 1
|
||||
if right > N :
|
||||
continue
|
||||
for i in range(N):
|
||||
kk[i][i] = i
|
||||
|
||||
if l == 2 :
|
||||
dp[left][right] = matrix_size[left][0]*matrix_size[left][1]*matrix_size[right][1]
|
||||
for length in range(1, N):
|
||||
for i in range(N - length):
|
||||
j = i + length
|
||||
dp[i][j] = float('inf')
|
||||
|
||||
else :
|
||||
for k in range(left+1, right) :
|
||||
temp = dp[left][k] + dp[k+1][right] + matrix_size[left][0]*matrix_size[k][1]*matrix_size[right][1]
|
||||
dp[left][right] = min(dp[left][right], temp)
|
||||
start_k = kk[i][j-1]
|
||||
end_k = kk[i+1][j]
|
||||
|
||||
for k in range(start_k, end_k + 1):
|
||||
if k >= N-1: continue
|
||||
|
||||
val = dp[i][k] + dp[k+1][j] + matrix[i][0] * matrix[k][1] * matrix[j][1]
|
||||
|
||||
if val < dp[i][j]:
|
||||
dp[i][j] = val
|
||||
kk[i][j] = k
|
||||
|
||||
print(dp[0][N-1])
|
||||
|
||||
print(dp[1][N])
|
||||
Loading…
x
Reference in New Issue
Block a user