nukw0n
찐이의 개발 연결구과
nukw0n
전체 방문자
오늘
어제
  • 분류 전체보기 (38)
    • 유연해지기 (21)
      • React.js (11)
      • Javascript (5)
      • webpack & babel (1)
      • etc. (4)
      • Next.js (0)
    • 단단해지기 (13)
      • Algorithm (9)
      • Computer Science (4)
    • 속닥속닥 (4)
    • 책읽는 남자 (0)

블로그 메뉴

    공지사항

    인기 글

    태그

    • React
    • 콜백 ref
    • useBuiltIns
    • bfs
    • Auto Batching
    • javascript
    • Batching
    • intersectionobserver api
    • 프로그래머스
    • dfs
    • vallia 라우터
    • 알고리즘
    • Error Boundary
    • vanilla spa
    • sass vs postcss
    • React 18
    • history API
    • 백준
    • fallback UI
    • error 안 뜸

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    nukw0n

    찐이의 개발 연결구과

    [백준/BOJ 알고리즘] 17845 수강 과목 C++
    단단해지기/Algorithm

    [백준/BOJ 알고리즘] 17845 수강 과목 C++

    2021. 9. 12. 15:38

     

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

     

     

    17845번: 수강 과목

    첫줄에 서윤이의 최대 공부시간 N (1 ≤ N ≤ 10,000), 과목 수 K (1 ≤ K ≤ 1,000)이 공백을 사이에 두고 주어진다.  이후 K개의 줄에 중요도 I (1 ≤ I ≤ 100,000), 필요한 공부시간 (1 ≤ T ≤ 10,000)이

    www.acmicpc.net

     

    0-1 Knapsack 문제이다.

    링크 에서 0-1 Knapsack에 대해 알아볼 수 있다. (필자가 작성한 글임)

     

    bottom-up 방식으로 DP를 구성하면 된다.

    O(NK)의 시간복잡도를 갖는다.

    #include <iostream>
    #include <algorithm>
    #define MAX_N 10001
    #define MAX_K 1001
    using namespace std;
    
    int n,k;
    int importance[MAX_N], studyTime[MAX_K], dp[MAX_K][MAX_N];
    
    void solution() {
      for (int i=1; i<=k; i++) {
        for (int j=1; j<=n; j++) {
          if (studyTime[i] > j) dp[i][j] = dp[i-1][j];
          else dp[i][j] = max(dp[i-1][j], dp[i-1][j-studyTime[i]] + importance[i]);
        }
      }
    
      cout << dp[k][n] << "\n";
    }
    
    int main(){
      ios::sync_with_stdio(0);
      cin.tie(0);
      cin >> n >> k;
      for(int i=1; i<=k; i++) { 
        cin >> importance[i] >> studyTime[i];
      }
    
      dp[0][0] = 0;
      solution();
    }

    '단단해지기 > Algorithm' 카테고리의 다른 글

    [프로그래머스] 복서 정렬하기 Javascript  (0) 2021.09.18
    [프로그래머스] 모음사전 Javascript  (0) 2021.09.18
    [백준/BOJ 알고리즘] 10830 행렬 제곱 C++  (0) 2021.09.12
    [백준/BOJ 알고리즘] 16236 아기상어 C++  (0) 2020.09.17
    [백준/BOJ 알고리즘] 1039 교환 C++  (1) 2020.09.10
      '단단해지기/Algorithm' 카테고리의 다른 글
      • [프로그래머스] 복서 정렬하기 Javascript
      • [프로그래머스] 모음사전 Javascript
      • [백준/BOJ 알고리즘] 10830 행렬 제곱 C++
      • [백준/BOJ 알고리즘] 16236 아기상어 C++
      nukw0n
      nukw0n
      프론트엔드 개발자 권혁진입니다.

      티스토리툴바