백준/DP

[코딩테스트] #11. 백준 12865번, 11054번, 1699번 -> 다시 복습하기

ydin 2021. 12. 22. 17:56

1. 12865번: 평범한 배낭 

-문제: https://www.acmicpc.net/problem/12865

 

12865번: 평범한 배낭

첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000)

www.acmicpc.net

어려웠던 문제

 

-정답 풀이: 

  • item에는 문제 값 대입(인덱스0에는 물건의 무게가, 인덱스1에는 물건의 가치가 들어있다)
  • N[0],K[0]에는 0값을 넣어준다 -> (N+1)x(K+1) 행렬인 dp 생성 

 

  • i번째 물건의 무게가 남은 무게보다 작을때 가치값 변경됨 
  • 당연히 i번째 물건의 무게가 오버되면 가방에 넣을 수 없으므로 이전행값과 동일하게된다(else문)
  • 점화식: dp[i][j]=max(dp[i-1][j],dp[i-1][j-item[i][0]]+item[i][1]) -> 점화식 아직 이해 안갔음

 

 

2. 11054: 가장 긴 바이토닉 부분 수열

-문제: https://www.acmicpc.net/problem/11054

 

11054번: 가장 긴 바이토닉 부분 수열

첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000)

www.acmicpc.net

가장 긴 수열 구하는 문제를 알면 풀  수 있는 문제.

 

-정답풀이: 

 

  • 증가하는 수열부분

 

  • 감소하는 수열부분
  • 끝부분부터 거꾸로 진행하면 감소하는 부분도 결국 증가하는 부분과 같은 풀이를 가지게 된다

 

 

3. 1699: 제곱수의 합

-문제: https://www.acmicpc.net/problem/1699

 

1699번: 제곱수의 합

어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다

www.acmicpc.net

이것도 어려웠던 문제다

 

-정답풀이:

 

  • 8번 9번 점화식이 아직 이해가 가지 않는다. 추후로 더 봐야할 것 같다