https://school.programmers.co.kr/learn/courses/30/lessons/118668
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
#include <string>
#include <vector>
using namespace std;
using vi = vector<int>;
using vvi = vector<vi>;
vvi dp;
int N;
int solution(int alp, int cop, vector<vector<int>> problems) {
N = 151;
dp.resize(N, vi(N, 987654321));
dp[alp][cop] = 0;
int dest_alp = 0, dest_cop = 0;
for (auto p : problems) {
dest_alp = max(dest_alp, p[0]);
dest_cop = max(dest_cop, p[1]);
}
alp = min(alp, dest_alp);
cop = min(cop, dest_cop);
for (int i = alp; i <= dest_alp; ++i) {
for (int j = cop; j <= dest_cop; ++j) {
dp[i][j] = i - alp + j - cop;
}
}
for (auto p : problems) {
for (int i = max(alp, p[0]); i <= dest_alp; ++i) {
int ii = min(i + p[2], dest_alp);
for (int j = max(cop, p[1]); j <= dest_cop; ++j) {
int jj = min(j + p[3], dest_cop);
dp[ii][jj] = min(dp[ii][jj], dp[i][j] + p[4]);
}
}
}
for (auto p : problems) {
for (int i = max(alp, p[0]); i <= dest_alp; ++i) {
int ii = min(i + p[2], dest_alp);
for (int j = max(cop, p[1]); j <= dest_cop; ++j) {
int jj = min(j + p[3], dest_cop);
dp[ii][jj] = min(dp[ii][jj], dp[i][j] + p[4]);
}
}
}
/*for (int i = alp; i <= dest_alp; ++i) {
for (int j = cop; j <= dest_cop; ++j) {
for (auto p : problems) {
if (i < p[0] || j < p[1]) continue;
int ii = min(i + p[2], dest_alp);
int jj = min(j + p[3], dest_cop);
dp[ii][jj] = min(dp[ii][jj], dp[i][j] + p[4]);
}
}
}*/
return dp[dest_alp][dest_cop];
}
dp 업데이트 순서를 고려
'알고리즘 > programmers' 카테고리의 다른 글
2021 KAKAO BLIND RECRUITMENT / 광고 삽입 (0) | 2022.11.27 |
---|---|
2022 KAKAO TECH INTERNSHIP 행렬과 연산 (0) | 2022.10.30 |
2022 KAKAO BLIND RECRUITMENT / 양궁대회 (0) | 2022.10.03 |
2022 KAKAO BLIND RECRUITMENT / 사라지는 발판 (0) | 2022.10.03 |
2022 KAKAO BLIND RECRUITMENT / 파괴되지 않은 건물 (0) | 2022.10.03 |