지우너
[코드트리] 2차원 최대 증가 수열 C++ 본문
문제
계획 세우기
칸을 선택하고, (0,0)부터 (i, j)까지 돌면서 dp를 갱신해야 한다. for문을 4개 써야 한다는 걸 떠올리는 게 중요한 거 같다?
풀이
#include <iostream>
using namespace std;
int n, m;
int arr[51][51];
int dp[51][51];
void FillDP(int x, int y){
for(int i=0; i<x; ++i){
for(int j=0; j<y; ++j){
if(arr[x][y]>arr[0][0] && arr[i][j]<arr[x][y]){
dp[x][y]=max(dp[x][y], dp[i][j]+1);
}
}
}
}
int main() {
// input
cin >> n >> m;
for(int i=0; i<n; ++i){
for(int j=0; j<m; ++j){
cin >> arr[i][j];
}
}
// solution
dp[0][0]=1;
for(int i=1; i<n; ++i){
for(int j=1; j<m; ++j){
FillDP(i, j);
}
}
// output
int answer =0;
for(int i=0; i<n; ++i){
for(int j=0; j<m; ++j){
answer=max(answer, dp[i][j]);
}
}
cout << answer << '\n';
return 0;
}
'Problem Solving' 카테고리의 다른 글
[코드트리] 마을 구분하기 C++ DFS (0) | 2024.07.30 |
---|---|
[코드트리] 둘 중 하나 잘 고르기 C++ (0) | 2024.07.17 |
[코드트리] 최대 증가 부분 수열 C++ (0) | 2024.07.05 |
[코드트리] 상한 귤 C++ (0) | 2024.06.30 |
[코트트리] 우리는 하나 C++ (0) | 2024.06.29 |