๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm/BOJ

[BOJ] ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ(12865)

[๋ฐฑ์ค€(BOJ)] ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ(12865) C++

๋ฌธ์ œ : BOJ_12865๋ฒˆ ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ

๋ฌธ์ œ ์„ค๋ช…

DP(๋ƒ…์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜)

DP ๋ฌธ์ œ ์ค‘ ์œ ๋ช…ํ•œ ๋ฌธ์ œ์ธ ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋ฌผํ’ˆ์˜ ์ˆ˜์™€ ๋ฐฐ๋‚ญ์— ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฌด๊ฒŒ๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

์ด์–ด์„œ ๊ฐ๊ฐ ๋ฌผํ’ˆ์˜ ๋ฌด๊ฒŒ์™€ ๊ฐ€์น˜๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ, ๊ฐ€๋ฐฉ ์•ˆ์— ์ตœ๋Œ€ ๋ฌด๊ฒŒ๋ฅผ ์ดˆ๊ณผํ•˜์ง€ ์•Š๊ฒŒ ๋„ฃ์—ˆ์„ ๋•Œ ์ตœ๋Œ€ ๊ฐ€์น˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์ด๋•Œ ์ฃผ์˜ํ•  ๊ฒƒ์€ ๊ฐ๊ฐ์˜ ๋ฌผํ’ˆ์€ ํ•˜๋‚˜๋งŒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ํ•˜๋‚˜์˜ ๋ฌผํ’ˆ์ด ์ค‘๋ณต๋˜๊ฒŒ ๋“ค์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


Solution

dp๋ฅผ ์ด์šฉํ•œ ํ’€์ด๋ฅผ ํ•ด๋ดค์Šต๋‹ˆ๋‹ค.

2์ฐจ์› dp๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

dp[i ๋ฒˆ์งธ๊นŒ์ง€ ๋ฌผ๊ฑด์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ][๋ฌด๊ฒŒ๊ฐ€ j ์ผ ๋•Œ] = ์ตœ๋Œ“๊ฐ’

1~n๊นŒ์ง€์˜ ๋ฌผ๊ฑด์—์„œ ํ˜„์žฌ ์ตœ๋Œ“๊ฐ’์„ ์•Œ๊ณ ์ž ํ•˜๋Š” ๋ฌด๊ฒŒ๊ฐ€ j๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, 1~n ๋ฒˆ์˜ ๋ฌผ๊ฑด์„ ์‚ฌ์šฉํ•˜์—ฌ j์˜ ๋ฌด๊ฒŒ์—์„œ ๊ฐ€์น˜์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ฐฑ์‹ ํ•ด ์ฃผ๋Š” dp ์‹์ž…๋‹ˆ๋‹ค.

2์ค‘ for ๋ฌธ์˜ ์ฒซ ๋ฒˆ์งธ for ๋ฌธ์—์„œ 1~n๊นŒ์ง€์˜ ๋ฌผ๊ฑด์„ ์ˆœํšŒํ•˜๋ฉฐ, ๋‘ ๋ฒˆ์งธ ํฌ๋ฌธ์—์„œ ๋ฐฐ๋‚ญ์˜ ์ตœ๋Œ€ ๋ฌด๊ฒŒ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ dp ๊ฐ’์„ ๊ฐฑ์‹ ํ•ด ์ค๋‹ˆ๋‹ค.

์ด๋•Œ ์ฒ˜์Œ dp[i][j]์˜ ๊ฐ’์€ i ๋ฒˆ์งธ ๋ฌผ๊ฑด์„ j ๋ฌด๊ฒŒ์—์„œ ๋‹ด์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์ฆ‰ dp[i-1][j]๋กœ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ๊ณ  ๊ฐ’์„ ๋น„๊ตํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋น„๊ตํ•ด ์ค˜์•ผ ํ•˜๋Š” ๊ฐ’์€ dp[i][j-i ๋ฒˆ์งธ ๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ] + i ๋ฒˆ์งธ ๋ฌผ๊ฑด์˜ ๊ฐ€์น˜์™€ ๋น„๊ตํ•ด ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฐ’์€ i ๋ฒˆ์งธ ๋ฌผ๊ฑด์„ ํ˜„์žฌ ๋ฌด๊ฒŒ์— ๋‹ด์•˜์„ ๋•Œ์˜ ์ตœ๋Œ€ ๊ฐ€์น˜์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰ ํ˜„์žฌ i ๋ฒˆ์งธ์˜ ๋ฌผ๊ฑด์„ j ๋ฌด๊ฒŒ์—์„œ ๋‹ด์•˜์„ ๋•Œ์™€ ๋‹ด์ง€ ์•Š์€ ๊ฒฝ์šฐ๋ฅผ ๋น„๊ตํ•˜๋ฉฐ dp๋ฅผ ๊ฐฑ์‹ ํ•ด ์ค๋‹ˆ๋‹ค.


Description

  • ๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ์™€ ๊ฐ€์น˜๋Š” pair<int,int>๋กœ ๋‹ด์•„์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector<pair<int,int>> adj;
int dp[101][100001];
int n, k;
int main(){
    cin >> n >> k;
    adj.resize(n+1);
    for(int i=1;i<=n;i++){
        int w,v;
        cin >> w >> v;
        adj[i]={w,v};
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=k;j++){
            dp[i][j]=dp[i-1][j];
            if(j-adj[i].first>=0){
                int value = dp[i-1][j-adj[i].first]+adj[i].second;
                dp[i][j]=max(dp[i][j],value);
            }
        }
    }
    cout << dp[n][k] << '\n';
    return 0;
}

'Algorithm > BOJ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ] ์ด์ง„ ํŠธ๋ฆฌ(13325)  (0) 2022.03.12
[BOJ] ํ‡ด์‚ฌ(14501)  (0) 2022.03.12
[BOJ] ์™ธํŒ์› ์ˆœํšŒ(2098)  (0) 2022.03.11
[BOJ] ์Šค๋„์ฟ (2580)  (0) 2022.03.10
[BOJ] ๋ฐฑ์กฐ์˜ ํ˜ธ์ˆ˜(3197)  (0) 2022.03.10