๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 1932๋ฒˆ - ์ •์ˆ˜ ์‚ผ๊ฐํ˜•

by ์•ˆ์ฃผํ˜• 2022. 4. 4.

๋ฌธ์ œ

 

1932๋ฒˆ: ์ •์ˆ˜ ์‚ผ๊ฐํ˜•

์ฒซ์งธ ์ค„์— ์‚ผ๊ฐํ˜•์˜ ํฌ๊ธฐ n(1 ≤ n ≤ 500)์ด ์ฃผ์–ด์ง€๊ณ , ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ n+1๋ฒˆ์งธ ์ค„๊นŒ์ง€ ์ •์ˆ˜ ์‚ผ๊ฐํ˜•์ด ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net

์ฝ”๋“œ

#include <iostream>

using namespace std;

int arr[501][501];
int dp[501][501];
int ans;
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int N; cin>>N;
    for(int i=1; i<=N; i++){
        for(int k=0; k<i; k++){
            cin>>arr[i-1][k];
        }
    }
    dp[0][0] = arr[0][0];
    ans = dp[0][0];
    
    for(int i=1; i<N; i++){
        for(int k=0; k<N; k++){
            if(k==0) dp[i][k] = dp[i-1][k] + arr[i][k];
            else if(k==N-1) dp[i][k] = dp[i-1][k-1] + arr[i][k];
            else dp[i][k] = max(dp[i-1][k-1]+arr[i][k],dp[i-1][k]+arr[i][k]);
            ans = max(ans, dp[i][k]);
        }
    }
    cout<<ans;
    
}

 

ํ’€์ด

 ํ˜„์žฌ ์ธต์˜ ์œ„ ์ชฝ์˜ ์™ผ์ชฝ ๋˜๋Š” ๋Œ€๊ฐ์„  ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๊ฒƒ ์ค‘์—์„œ ์„ ํƒํ•˜์—ฌ ๋งŒ๋“ค์–ด ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

                  7
               3   8
             8   1   0
           2   7   4   4
        4   5   2   6   5

ํ•˜์ง€๋งŒ ์ž…๋ ฅ์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

5

7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

๋”ฐ๋ผ์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ์ ํ™”์‹์„ ์„ธ์›Œ ๋งจ ์ฒ˜์Œ๊ณผ ๋งจ ๋ ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋จธ์ง€ ์ผ ๋•Œ์˜ ๊ฒฝ์šฐ๋ฅผ  ๋‚˜๋ˆ„์–ด ์ ํ™”์‹์„ ์„ธ์›Œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

if(k==0) dp[i][k] = dp[i-1][k] + arr[i][k];
else if(k==N-1) dp[i][k] = dp[i-1][k-1] + arr[i][k];
else dp[i][k] = max(dp[i-1][k-1] + arr[i][k], dp[i-1][k] + arr[i][k]);

 

๋Œ“๊ธ€