cost 제한에 맞춰
score의 최대값을 구하는 문제입니다.
그 최대 score출력
https://www.acmicpc.net/problem/14728
문제 입니다.
제가 짠 코드 입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #include <iostream> #include <algorithm> using namespace std; //예상 소모 시간 int arr[100]; //예상 획득 점수 int brr[100]; int N,costLimit; //sumtime -- 사용한 시간 int Search(int index,int sumTime) { //이 과목 선택시 시간이 초과하면 if (costLimit < sumTime + arr[index] || index >= N) { return 0; } int result = 0; //여유가 있을때 if (M >= sumTime + arr[index]) { //이 과목 포함 예상 획득 점수 int a = Search(index + 1, sumTime + arr[index]) + brr[index]; //이 과목 비포함 예상 획득 점수 int b = Search(index + 1, sumTime); result = max(a, b); } return result; } int main() { cin >> N >> costLimit; for (int i = 0; i < N; i++) { cin >> arr[i]; cin >> brr[i]; } cout << Search(0,0); return 0; } | cs |
뭘 메모제이션 해야할까요?
점화식 구조가 떠오르지 않습니다.
일차원 캐시가 아닌 2차원 배열을 캐시로 사용해야 하는걸까요?
생각해보니 그냥 냅색문제네용ㅇ
허허허 히히
날려버린 내 시간
씨-발
2차원 배열이 나을 것 같아요. 해당 과목에 대해 포함, 미포함으로 불리고 포함일 때 최대, 미포함일 때 최대 이렇게 케이스로 나눠서 풀면 될거 같아요.
하하
인풋 n에 대한 아웃풋 m을 cache[n]=m 처럼 채우면 될 거에요...
이런 글을 적는 사이 푸셨군요
답변 달아줘서 고마워요