-
[백준 14501] 퇴사백준/DP 2024. 8. 11. 14:37
얼핏보면 배낭 0-1문제랑 정말 비슷해보이는데
제약조건이 있어 점화식이 달라진다
배낭문제는 담을 수 있으면 언제나 특정 물건을 담을 수 있었다
하지만 이 문제는 특정 상담을 할 수 있는 경우가 하루에 그친다
왜냐하면 한 개의 상담은 오직 해당 날짜에만 할 수 있기 때문이다
그 점을 생각해서 점화식을 짜면 아래와 같이 나옴
DP 논리는 평범한 배낭과 동일하다
내려가면서 특정 상담을 1개씩 더 고려한 결과가 나오는 것이다
#include <iostream> #include <vector> #include <algorithm> #define SIZE 16 using namespace std; int N; int dp[SIZE][1001] = { 0, }; int W[SIZE], V[SIZE]; void solve() { for (int i = 1; i <= N; i++) { for (int k = i; k <= N; k++) { // i번째 상담을 고려할 수 있는 경우면 if (k - W[i] + 1 == i) { dp[i][k] = max(dp[i - 1][k], dp[i - 1][k - W[i]] + V[i]); } else { dp[i][k] = max(dp[i - 1][k], dp[i][k - 1]); } } } } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> N; for (int i = 1; i <= N; i++) { cin >> W[i] >> V[i]; } solve(); cout << dp[N][N]; return 0; }
'백준 > DP' 카테고리의 다른 글
[백준 2293] 동전 1 (0) 2024.08.02 [백준 13904] 과제 (0) 2024.04.11 [백준 1463] 1로 만들기 (1) 2024.02.18 [백준 1535] 안녕 (0) 2024.02.17 [백준 12865] 평범한 배낭 (01 배낭문제) (0) 2024.02.17