πŸ’  Cpp/[Solved.ac] Class2~4

[BOJ][C++] λ°±μ€€ 1932번: μ •μˆ˜ μ‚Όκ°ν˜•

선달 2023. 2. 8. 17:27
λ°˜μ‘ν˜•

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

 

1932번: μ •μˆ˜ μ‚Όκ°ν˜•

첫째 쀄에 μ‚Όκ°ν˜•μ˜ 크기 n(1 ≤ n ≤ 500)이 주어지고, λ‘˜μ§Έ 쀄뢀터 n+1번째 μ€„κΉŒμ§€ μ •μˆ˜ μ‚Όκ°ν˜•μ΄ 주어진닀.

www.acmicpc.net

 

문제

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

μœ„ 그림은 크기가 5인 μ •μˆ˜ μ‚Όκ°ν˜•μ˜ ν•œ λͺ¨μŠ΅μ΄λ‹€.

맨 μœ„μΈ΅ 7λΆ€ν„° μ‹œμž‘ν•΄μ„œ μ•„λž˜μ— μžˆλŠ” 수 쀑 ν•˜λ‚˜λ₯Ό μ„ νƒν•˜μ—¬ μ•„λž˜μΈ΅μœΌλ‘œ λ‚΄λ €μ˜¬ λ•Œ, μ΄μ œκΉŒμ§€ μ„ νƒλœ 수의 합이 μ΅œλŒ€κ°€ λ˜λŠ” 경둜λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λΌ. μ•„λž˜μΈ΅μ— μžˆλŠ” μˆ˜λŠ” ν˜„μž¬ μΈ΅μ—μ„œ μ„ νƒλœ 수의 λŒ€κ°μ„  μ™Όμͺ½ λ˜λŠ” λŒ€κ°μ„  였λ₯Έμͺ½μ— μžˆλŠ” 것 μ€‘μ—μ„œλ§Œ 선택할 수 μžˆλ‹€.

μ‚Όκ°ν˜•μ˜ ν¬κΈ°λŠ” 1 이상 500 μ΄ν•˜μ΄λ‹€. μ‚Όκ°ν˜•μ„ 이루고 μžˆλŠ” 각 μˆ˜λŠ” λͺ¨λ‘ μ •μˆ˜μ΄λ©°, λ²”μœ„λŠ” 0 이상 9999 μ΄ν•˜μ΄λ‹€.

μž…λ ₯

첫째 쀄에 μ‚Όκ°ν˜•μ˜ 크기 n(1 ≤ n ≤ 500)이 주어지고, λ‘˜μ§Έ 쀄뢀터 n+1번째 μ€„κΉŒμ§€ μ •μˆ˜ μ‚Όκ°ν˜•μ΄ 주어진닀.

좜λ ₯

첫째 쀄에 ν•©μ΄ μ΅œλŒ€κ°€ λ˜λŠ” κ²½λ‘œμ— μžˆλŠ” 수의 합을 좜λ ₯ν•œλ‹€.

 

풀이

// Authored by : seondal
// Co-authored by : -

// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL);

    int n;
    cin >> n;
    vector<vector<int>> v(n);
    for(int i=0; i<n; i++){
        for(int j=0; j<=i; j++) {
            int input;
            cin >> input;
            v[i].push_back(input);
        }
    }
    
    vector<vector<int>> dp(n, vector<int>(n));
    dp[0][0] = v[0][0];
    for(int i=1; i<n; i++) {
        dp[i][0] = dp[i-1][0] + v[i][0];
        for(int j=1; j<i; j++) {
            dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + v[i][j];
        }
        dp[i][i] = dp[i-1][i-1] + v[i][i];
    }
    
    sort(dp[n-1].begin(), dp[n-1].end(), greater<>());
    
    cout << dp[n-1][0];
    
    return 0;
}

/*
 */
λ°˜μ‘ν˜•