DP
-
일단 메모이제이션을 통한 dp가 생각나긴 했는데 지금 방문가능한 오락실이 오름차순으로 허용되고, 또 방문 횟수에 따라 출력을 해야 하기 때문에 dp 배열을 몇 차원으로, 어떻게 관리를 해줘야 할지 고민을 많이 했다. 지금 그런데 좌표의 제한이 50이고 오락실 번호도 그리고 방문 가능한 횟수의 제한도 50이기 때문에 이 모든 정보(y, x, 방문 횟수, 이전에 방문한 오락실 번호)를 다 넣어서 4차원 배열을 사용해 보기로 했다. 어차피 뭐 다 해봤자 50^4=6250000 이니까... int dp[54][54][54][54]; // y,x,최근에 방문한 오락실 번호,지난 오락실 수 일단 초기에 값을 받으며 dp 테이블을 세팅해 주는 작업을 진행하였다. void init() { cin >> n >> m ..
백준 1513 - 경로 찾기 (C++)일단 메모이제이션을 통한 dp가 생각나긴 했는데 지금 방문가능한 오락실이 오름차순으로 허용되고, 또 방문 횟수에 따라 출력을 해야 하기 때문에 dp 배열을 몇 차원으로, 어떻게 관리를 해줘야 할지 고민을 많이 했다. 지금 그런데 좌표의 제한이 50이고 오락실 번호도 그리고 방문 가능한 횟수의 제한도 50이기 때문에 이 모든 정보(y, x, 방문 횟수, 이전에 방문한 오락실 번호)를 다 넣어서 4차원 배열을 사용해 보기로 했다. 어차피 뭐 다 해봤자 50^4=6250000 이니까... int dp[54][54][54][54]; // y,x,최근에 방문한 오락실 번호,지난 오락실 수 일단 초기에 값을 받으며 dp 테이블을 세팅해 주는 작업을 진행하였다. void init() { cin >> n >> m ..
2025.03.01 -
아... 너무 어렵다 DP 기존에 DP문제는 뭔가 특정 시점의 상태값에 대해 더 더하거나 빼거나 해서 다음 상태값을 결정하는 거였는데, 이건 새로운 느낌의 DP문제였다. 우선 큰 그림은몸무게들의 총합을 구해서 (총 사람수 n / 2) 명으로 최대한 (몸무게의 총합 / 2)에 가깝게 만들기이다. 일단 dp 테이블은 dp [한 팀에 최대로 들어갈 수 있는 사람 수][최대 몸무게]로 정했다. 각 dp [i][j]에서 값은 해당 사람 수(i)에서 무게(j)를 만들 수 있으면 1, 없으면 0으로 정했다. 이때 dp [0][0] 즉 0명으로 무게 0을 만들 수 있으므로 dp[0][0]=1로 잡고 시작했다. 그다음에 입력받은 무게들에 대해 dp를 돌려줘야 하는데, 우선 입력값은 다음과 같다. 41235 이러면 정답..
백준 4384 - 공평하게 팀 나누기 (C++)아... 너무 어렵다 DP 기존에 DP문제는 뭔가 특정 시점의 상태값에 대해 더 더하거나 빼거나 해서 다음 상태값을 결정하는 거였는데, 이건 새로운 느낌의 DP문제였다. 우선 큰 그림은몸무게들의 총합을 구해서 (총 사람수 n / 2) 명으로 최대한 (몸무게의 총합 / 2)에 가깝게 만들기이다. 일단 dp 테이블은 dp [한 팀에 최대로 들어갈 수 있는 사람 수][최대 몸무게]로 정했다. 각 dp [i][j]에서 값은 해당 사람 수(i)에서 무게(j)를 만들 수 있으면 1, 없으면 0으로 정했다. 이때 dp [0][0] 즉 0명으로 무게 0을 만들 수 있으므로 dp[0][0]=1로 잡고 시작했다. 그다음에 입력받은 무게들에 대해 dp를 돌려줘야 하는데, 우선 입력값은 다음과 같다. 41235 이러면 정답..
2025.02.24