0-1배낭문제


답안 제출

Points: 11
시간 제한: 2.0s
메모리 제한: 256M

문제 유형
허용된 언어
C, C++, Python

어떤 배낭에 최대 W만큼의 무게를 담을 수 있습니다.

배낭에 넣을 수 있는 N개의 물건이 주어지며, 각 물건은 무게 w와 가치 v의 정보를 가지고 있습니다.

물건들을 적절히 선택하여 배낭에 담았을 때, 담은 물건들의 가치의 총합이 최대가 되도록 하는 프로그램을 작성하시오.

단, 각 종류의 물건은 최대 한 개씩만 존재하며, 선택한 물건들의 무게 합은 배낭의 최대 무게 W를 초과할 수 없습니다.

입력

첫째 줄에 물건의 개수 N과 배낭의 최대 무게 W가 공백을 사이에 두고 주어진다.

둘째 줄부터 N개의 줄에 걸쳐 각 물건의 무게 w와 가치 v가 한 줄에 하나씩 공백을 사이에 두고 주어진다.

출력

첫째 줄에 배낭의 최대 무게 W를 초과하지 않으면서 담을 수 있는 물건의 가치 총합의 최댓값을 출력한다.

제한 사항

  • 1 ≤ N ≤ 100
  • 1 ≤ W ≤ 10,000
  • 1 ≤ w, v ≤ 100

예제 입력 1

4 5
2 3
1 2
3 3
2 2

예제 출력 1

7

코멘트


  • -2
    42기강경빈  2026년 9월 13일 오후 12시 14분에 작성되었습니다

    include <iostream>

    include <vector>

    using namespace std;

    int n, w; vector <pair <int, int>> a; int v[10005];

    int main() { cin>>n>>w; for(int i=0; i<n; ++i){ int x, y; cin>>y>>x; a.emplace_back(x, y); } for (int i=1; i<=n; ++i) { for (int j=w; j>0; --j) { if (j>=a[i-1].second) v[j]=max(v[j], v[j-a[i-1].second]+a[i-1].first); } } cout<<v[w]; }


  • 1
    42기박리언  2026년 7월 26일 오전 11시 43분에 작성되었습니다

    배낭이 아주 평범한것 같아요.


    • -1
      42기차승우  2026년 7월 28일 오전 1시 55분에 작성되었습니다

      와! 정말.. 대단해!