PS

BOJ 17845 - 수강 과목

728x90

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

 

냅색 기본 문제인 백준 12865 평범한 배낭 문제와 사실상 똑같은 문제다.

참조 : sdy-study.tistory.com/240

 

 

- C++

#include <algorithm>
#include <iostream>
 
using namespace std;
 
int N, K;
int importance[1001], time[1001]; // 중요도, 시간 
int dp[1001][10001]; // dp[i][j] : 0 ~ i번째 과목 까지 살피면서, 가용한 시간이 j 일때, 최대 중요도 
 
int main() {
    cin.tie(0); ios_base::sync_with_stdio(0);
    
    cin >> N >> K;
    for (int i = 1; i <= K; ++i)
        cin >> importance[i] >> time[i];
        
    for (int i = 1; i <= K; ++i) {
        for (int j = 1; j <= N; ++j) {
            if (j - time[i] >= 0) dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - time[i]] + importance[i]);
            else dp[i][j] = dp[i - 1][j];
        }
    }
    
    cout << dp[K][N];
    
    return 0;
}
cs

728x90

'PS' 카테고리의 다른 글

DP 와 누적합  (0) 2021.03.18
BOJ 14728 - 벼락치기  (0) 2021.03.18
BOJ 10026 - 적록색약  (0) 2021.03.12
BOJ 2661 - 좋은 수열  (0) 2021.03.12
BOJ 3114 - 사과와 바나나  (0) 2021.03.12