반응형
오홋 이제 DP 조금 재밌어졌다! 규칙성만 찾으면 오히려 문제 깔끔함!!
문제 풀이
#include<iostream> #include<algorithm> using namespace std; int n; int RGB[3][1001] = { 0, }; int DP[3][1001] = { 0, }; int main() { cin >> n; for (int j = 0; j < n; j++) { for (int i = 0; i < 3; i++) { cin >> RGB[i][j]; } } // 초기화 for (int i = 0; i < 3; i++) { DP[i][0] = RGB[i][0]; } for (int j = 1; j < n; j++) { for (int i = 0; i < 3; i++) { DP[i][j] = min(DP[(i+1)%3][j-1]+RGB[i][j], DP[(i+2)%3][j-1]+RGB[i][j]); } } int smallest = DP[0][n-1]; for (int i = 1; i < 3; i++) { if (smallest > DP[i][n - 1]) { smallest = DP[i][n-1]; } } cout << smallest << endl; return 0; }
반응형