본문 바로가기

알고리즘

BOJ 11964 Fruit Feast

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

 

11964번: Fruit Feast

Bessie has broken into Farmer John's house again! She has discovered a pile of lemons and a pile of oranges in the kitchen (effectively an unlimited number of each), and she is determined to eat as much as possible. Bessie has a maximum fullness of \(T\) (

www.acmicpc.net

 

전형적인 DP문제였다.

거스름돈 문제 ( boj 2294) 를 풀었던 사람들은 바로 풀 수 있었을 것이다.

좀더 최적화 할 수 있는 방안은 vector<int> 대신 vector<bool> 을 사용하여 메모리를 줄이는 것이다.

reference site에는 다음과 같이 나와있다.
One potential optimization involves coalescing vector elements such that each element occupies a single bit instead of sizeof(bool) bytes

이를 이용하면 메모리를 많이 아깔 수 있다.

#include <cstdio>
#include <vector>

int T,A,B;
int answer = 1;
std::vector<bool> v;

void dp(){
    for(int i=1;i<=T;i++){
        if(v[i]) {
            if(i+A <= T) v[i+A] = true;
            if(i+B <= T) v[i+B] = true; 
            if(answer < i) answer = i;
        }
    }
}

int main(){
    scanf("%d%d%d",&T,&A,&B);
    v.resize(T+1);
    v[A] = v[B] = true;
    dp();
    for(int i=0;i<=T;i++){ if(v[i]) v[i/2] = true; }
    dp();
    printf("%d\n",answer);
    
    return 0;
}

 

참고
https://en.cppreference.com/w/cpp/container/vector_bool

'알고리즘' 카테고리의 다른 글

BOJ 11968 High Card Wins  (0) 2022.04.20
BOJ 15460 My Cow Ate My Homework  (0) 2022.04.20
BOJ 11997 Load Balancing (Silver)  (0) 2022.03.29
BOJ 23289 온풍기 안녕!  (0) 2022.02.08
BOJ 17387 선분 교차2  (0) 2022.02.06