

맨땅에 헤딩.
T A[N]은 L*N 바이트의 연속된 공간 할당 (L = 자료형 T의 크기)A[i]의 주소는 Xa + L * i로 계산됨movl (%rdx, %rcx, 4), %eax 방식으로 E[i] 접근p + i는 Xp + L * i와 같음Expr[i]는 *(Expr + i)와 동일int A[5][3]은 행 우선 순서로 메모리 배치&A[i][j] = x_A + 4 * (3 * i + j)A[i][j] 접근 시 매번 i * N + j 계산 필요int *Aptr = &A[i][0];
int *Bptr = &B[0][k];
while (Bptr != Bend) {
result += (*Aptr) * (*Bptr);
Aptr++;
Bptr += N;
}
&D[i][j] = x_D + L * (C * i + j)int A[n][n]처럼 N이 런타임에 결정되는 배열A + 4 * (n * i + j) imulq 필요N개의 물건과 M만큼의 무게를 버틸 수 있는 배낭이 존재,
각 물건마다 가치가 다를때 최대 가치의 합을 찾는 문제
본질은 물건을 배낭에 넣느냐 마느냐
이를 알고리즘 적으로 해석하면,
최대 M까지 담을 수 있는 배낭, K의 가치를 지는 물건 Nkg 을 가방에 넣는다면?
넣었다면 K의 가치와 (M - N) 까지 담을 수 있는 배낭이 됨.
만약 이를 넣지 않았다면 그대로 M Kg까지 담을 수 있는 배낭.
만약 6Kg 짜리 배낭이 있다면,
이때 $4의 가치를 갖는 3kg 물건을 넣는다면, 이제 3Kg 짜리 배낭을 채우면 된다.
즉 6Kg 배낭 최대 가치 = $4 + 3Kg 배낭 최대가치로
DP의 특징을 찍을 수 있다.
점화식을 뽑아보면,
물건 K 무게 > 베낭 무게 W:
dp[K][W] = dp[K - 1][W]
물건 K 무게 <= 배낭 W 무게
dp[K][W] = max(dp[K -1][W], K가치 + dp[K - 1][W- K의 무게]
이걸 코드로 만들면
import sys
input = sys.stdin.readline
N, K = map(int, input().split())
items = []
for _ in range(N):
W, V = map(int, input().split())
items.append((W, V))
dp = [[0] * (K + 1) for _ in range(N + 1)]
for i in range(1, N + 1):
weight, value = items[i - 1] # 현재 물건의 무게와 가치
for j in range(1, K + 1): # 현재 배낭 무게
if j < weight:
dp[i][j] = dp[i - 1][j] # 물건 못 넣음
else:
dp[i][j] = max(
dp[i - 1][j], # 안 넣은 경우
dp[i - 1][j - weight] + value # 넣은 경우
)
print(dp[N][K]) # 최대 가치 출력
LCS[i][j]는 str1[0~i-1]과 str2[0~j-1]의 연속된 공통 문자열의 길이str1[i-1] == str2[j-1]일 때만 갱신됨if str1[i-1] == str2[j-1]:
LCS[i][j] = LCS[i-1][j-1] + 1
else:
LCS[i][j] = 0 # 연속되지 않으면 0으로 초기화
LCS[i][j] 중 최댓값이 가장 긴 공통 문자열의 길이i 저장 → str1[end_idx - max_len : end_idx]로 실제 문자열 추출 가능LCS[i][j]는 str1[0~i-1], str2[0~j-1]의 최장 부분 수열의 길이if str1[i-1] == str2[j-1]:
LCS[i][j] = LCS[i-1][j-1] + 1
else:
LCS[i][j] = max(LCS[i-1][j], LCS[i][j-1])
LCS[len(str1)][len(str2)]이 최장 부분 수열의 길이LCS[i-1][j] 또는 LCS[i][j-1]와 같으면 해당 방향으로 이동i-1, j-1)| 항목 | Substring | Subsequence |
|---|---|---|
| 연속성 | O (연속 필수) | X (연속 아님) |
| 불일치 시 | 0으로 초기화 | max 값 유지 |
| 용도 | 특정 패턴 찾기 | 전체 흐름 속 일치 추적 |
이 문제가 DP로 해결가능한 문제인지 판단하는 것 부터가 어렵다.
많은 문제를 접해야 얻을 수있는 거라 최대한 많이 양치기 하기로...