-
백준 7579 앱 - C++, 배낭 문제쾌락없는 책임 (공부)/알고리즘 문제풀이 2021. 6. 15. 10:35반응형
#include <iostream> #include <algorithm> using namespace std; int n, m, sum = 0; int mem[10001]; int abyte[101]; int cost[101]; int main(){ scanf("%d %d", &n ,&m); for(int i = 0; i < n; i++) scanf("%d", &abyte[i]); for(int i = 0; i < n; i++){ scanf("%d", &cost[i]); sum += cost[i]; } for(int i = 0; i < n; i++){ for(int j = sum; j >= cost[i]; j--){ mem[j] = max(mem[j], mem[j-cost[i]] + abyte[i]); } } for(int i = 0; i < 10001; i++){ if(mem[i] >= m){ printf("%d\n", i); break; } } }
기존 배낭 문제와 비슷한 접근을 했지만 입력이 쌍으로 순차 입력이 아니라 각 항목을 입력받는 방식이라 배열이 2개 필요했습니다.
입력을 다 받고 나서는
mem[j] = max(mem[j], mem[j-cost[i]] + abyte[i]);
이걸 통해서 한번씩 배낭 문제를 풀이하면 됩니다. 메모리 j 비용일때 i번째를 활성화한것, 활성화하지 않은게 더 많이 사용하는지 알아보게 됩니다.
반응형'쾌락없는 책임 (공부) > 알고리즘 문제풀이' 카테고리의 다른 글
백준 17404 RGB 거리 2 - DP (0) 2021.06.17 백준 11657 타임머신 - C++, 벨만포드 알고리즘 (0) 2021.06.15 백준 2166 다각형의 면적 - C++, 벡터의 내적 (0) 2021.06.11 백준 9446 텀 프로젝트 - C++, DFS (0) 2021.06.10 백준 1956 운동 - 플로이드-와샬, C++ (0) 2021.06.07