[백준] 평범한 배낭( C++)

2025. 5. 12. 03:38·개발/알고리즘

문제 링크

https://www.acmicpc.net/problem/12865

 

 

코드 구현

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
	int N, K;
	cin >> N >> K;

	// dp[w] = 무게가 w일 때의 최대 가치
	vector<int> dp(K + 1, 0);

	for (int i = 0; i < N; i++)
	{
		int weight, value;
		cin >> weight >> value;

		for (int w = K; w >= weight; --w)
		{
			// 넣지 않는 경우 / 넣는 경우
			dp[w] = max(dp[w], dp[w - weight] + value);
		}
	}

	cout << dp[K] << endl;

	return 0;

}

 

 

해결 방법

동적 해결법 dp 배열을 사용하여 최대 무게 K에서의 최대 가치를 배열에 저장하였다. 

  • 입력 받은 아이템을 넣는 경우 : dp[w-weight] + value 
  • 넣지 않는 경우 : dp[w] (그대로)

w를 뒤에서부터 감소시킨 이유는 중복 선택을 방지하기 위해서이다.

 

'개발 > 알고리즘' 카테고리의 다른 글

[프로그래머스] 길 찾기 게임(C++)  (2) 2025.05.13
[백준] 회의실 배정(C++)  (1) 2025.05.12
[프로그래머스] n개의 최소공배수(C++)  (2) 2025.05.10
[프로그래머스] 전력망을 둘로 나누기(C++)  (1) 2025.05.06
[백준] 노드사이의 거리(C++)  (1) 2025.05.04
'개발/알고리즘' 카테고리의 다른 글
  • [프로그래머스] 길 찾기 게임(C++)
  • [백준] 회의실 배정(C++)
  • [프로그래머스] n개의 최소공배수(C++)
  • [프로그래머스] 전력망을 둘로 나누기(C++)
Majangnan
Majangnan
  • Majangnan
    개발 모코코
    Majangnan
  • 전체
    오늘
    어제
    • 분류 전체보기 (63) N
      • 개발 (62) N
        • C# (10)
        • SQL (3)
        • Unity (8)
        • Unreal (10)
        • C++ (2)
        • Server (1)
        • DX11 (8)
        • 알고리즘 (19) N
  • 블로그 메뉴

    • 홈
    • 방명록
    • 깃허브
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그래머스
    코딩테스트
    백준
    c++
    블루프린트
    blueprint
    C#
    UnReal
    언리얼
    알고리즘
    DirectX11
    슈팅게임
    Unity
    sql
    MAC
    상속
    Mecanim
    3dlight
    DX11
    dx3d
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Majangnan
[백준] 평범한 배낭( C++)
상단으로

티스토리툴바