Algorithm_C++/Dynamic Programming 18

백준 14002 : 가장 긴 증가하는 부분 수열 4

가장 긴 증가하는 부분 수열 2에서 벽느껴서 4는 어떨까 싶었는데 오히려 쉬웠다. N#include #include #include #include #include // memset 사용 위함#include #includeusing namespace std;int N,idx,max_idx = 0;//N> num(1001);int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> N; for(int i = 0; i > arr[i]; } dp[0] = 1; num[0].push_back(arr[0]); for(int i = 1; i arr[j]) { i..

백준 4485 : 녹색 옷 입은 애가 젤다지?

아 항상 인덱싱 실수를 하는 거 같다.... 다시 보면 보이는 데 i랑 j를 겁나게 헷갈려 쓴다. 1시간 걸렸다. 단순 상하좌우 탐색으로 접근하면 무한 루프가 나므로 dp가 갱신이 되었을 때만 그 주변을 탐색하는 걸 생각을 늦게 한 것 같다. 0,0에서 하면 내 함수가 출발을 못한다는 걸 늦게 알아차렸고, dfs에서 i와 j를 혼동하여 OutofBound error가 떴고, memset 괜히 써보려다가 이상하게 되어서 나중에 다시 이중 for문으로 초기화 했고... 여러가지로 좀 얻어갈게 많은 문제인 것 같다. 인덱싱 좀 헷갈리지 말자!! +그래프 최소 가중치 간선으로 queue를 써서 다익스트라 알고리즘을 하는게 더 깔끔한 것 같다. 다음엔 이런 형식을 볼 때 다익스트라를 생각해보자#include #i..

백준 1099 : 알 수 없는 문장

지피티의 힘을 빌렸다. 일단 문제를 잘 못 읽어 string사이의 거리를 계산해서 cost를 내야한다고 생각했고, string을 sort하여 비교한다 라는 생각을 못했다. dp인 것도 생각할만 했는데 앞의 둘을 모르니 견적이 안나왔던 거 같다. 다음부턴 고려하면서 풀자#include #include #include #include #include #include using namespace std;string seq;string words[51];int N, min_cost = 51;int dp[51];int get_cost(const string &a, const string &b) { int cost = 0; for (int i = 0; i > seq >> N; for (int i =..

백준 2579 : 계단 오르기

#include #include#include#include#include#include#include#include#includeusing namespace std;int N;int stair[301];int dp[301];int con[301];//해당 인덱스 계단을 마지막으로 밟을 때 최대인 배열//그 해당 최대가 마지막이 두칸 연속일 경우 비교//아니면 그냥 마지막 칸 더함int main() { ios_base::sync_with_stdio(false); cin.tie(0);cout.tie(0); cin >> N; for(int i = 1; i > stair[i]; } dp[1] = stair[1]; for(int i = 2; i dp[i-2]) { ..