๐Ÿ“ฆ7579: ์•ฑ


[์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด] ๊ฐ•๋™๊ทœ
Reviewed by Kade Kang (devkade12@gmail.com)
Reviewed:: 2024-02-18
๋ฌธ์ œ ํ™•์ธํ•˜๊ธฐ

ํ’€์ด

  • DP๋ฅผ ๋งŽ์ด ํ’€์–ด๋ณด์ง€ ์•Š์•„์„œ ๊ทธ๋Ÿฐ๊ฐ€ ์•„์ง๋„ DP ๊ฐœ๋…์ด ์ข€ ์–ด๋ ต๋‹ค.
  • dp[i][j] ๋Š” i ๋ฒˆ์งธ ์•ฑ์ด j ๋น„์šฉ์„ ์‚ฌ์šฉํ•ด์„œ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋œปํ•œ๋‹ค.
  • dp[i-1][j-cost[i]]+bytes[i] ์„ ํ†ตํ•ด ์ด์ „ ์•ฑ์—์„œ j-cost[i] ๋น„์šฉ์œผ๋กœ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ + ํ˜„์žฌ ์•ฑ์—์„œ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐฑ์‹ ํ•ด์ค€๋‹ค.
#include <iostream>
#include <algorithm>
#define endl '\n'
using namespace std;
 
int bytes[101], cost[101];
int dp[101][10001];
int N, M, sum = 0, res = INT32_MAX;
 
void Input(){
    cin >> N >> M;
    for(int i=1; i<=N; i++) {
        cin >> bytes[i];
    }
    for(int i=1; i<=N; i++) {
        cin >> cost[i];
        sum += cost[i];
    }
 
}
 
void Solution(){
    for(int i=1; i<=N; i++){
        for(int j=0; j<=sum; j++){
            if(j >= cost[i]){
                dp[i][j] = max(dp[i][j], dp[i-1][j-cost[i]]+bytes[i]);
            }
            dp[i][j] = max(dp[i][j], dp[i-1][j]);
            if(dp[i][j] >= M) {
                res = min(res, j);
            }
        }
    }
}
 
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
 
    Input();
    Solution();
    cout << res << endl;
 
    return 0;
}