728x90
반응형
목차
https://www.acmicpc.net/problem/2096
문제
문제 구현 방향
NodeJs로 dp구현하다가 메모리 초과를 해결할 수 없어서 c++로 다시 만들었다.
4mb제한이니 일차원 배열에 계속 초기화하는 식으로 누적했다.
코드 구현
#include <iostream>
#include <vector>
#include<map>
#include<math.h>
#include <algorithm>
#include<stack>
using namespace std;
int N;
int board[100001][3] = {0};
vector<int> dp;
vector<int> save;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> N;
for (int i = 0; i < N; i++) {
for (int j = 0; j < 3; j++) {
cin >> board[i][j];
}
}
for (int i = 0; i < 3; i++) {
dp.push_back(board[0][i]);
}
for (int i = 1; i < N; i++) {
save.push_back(board[i][0] + max(dp[0], dp[1]));
save.push_back(board[i][1] + max({ dp[0], dp[1], dp[2] }));
save.push_back(board[i][2] + max(dp[1], dp[2]));
dp[0] = save[0];
dp[1] = save[1];
dp[2] = save[2];
save.clear();
}
int m = max({ dp[0], dp[1], dp[2] });
dp.clear();
for (int i = 0; i < 3; i++) {
dp.push_back(board[0][i]);
}
for (int i = 1; i < N; i++) {
save.push_back(board[i][0] + min(dp[0], dp[1]));
save.push_back(board[i][1] + min({ dp[0], dp[1], dp[2] }));
save.push_back(board[i][2] + min(dp[1], dp[2]));
dp[0] = save[0];
dp[1] = save[1];
dp[2] = save[2];
save.clear();
}
int n = min({ dp[0], dp[1], dp[2] });
cout << m << " " << n;
return 0;
}
반응형
'백준 문제풀이' 카테고리의 다른 글
[백준][dp] 1699 제곱수의 합 c++구현 (0) | 2024.10.10 |
---|---|
[백준][dp] 11054 가장 긴 바이토닉 부분 수열 c++ 구현 (0) | 2024.10.06 |
[백준][dp] 2156 포도주 시식 c++구현 (1) | 2024.10.05 |
[백준][dp] 9465 스티커 c++구현 (2) | 2024.09.27 |
[백준][dp] 11057 오르막수 c++구현 (0) | 2024.09.26 |