algorithm

BOJ 1932

rkawk 2022. 9. 28. 19:20
더보기

μ •μˆ˜ μ‚Όκ°ν˜• μ„±κ³΅λ‹€κ΅­μ–΄

ν•œκ΅­μ–΄   
2 초 128 MB 68692 38901 29257 58.860%

문제

        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번째 μ€„κΉŒμ§€ μ •μˆ˜ μ‚Όκ°ν˜•μ΄ μ£Όμ–΄μ§„λ‹€.

좜λ ₯

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

예제 μž…λ ₯ 1 λ³΅μ‚¬

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

예제 좜λ ₯ 1 λ³΅μ‚¬

30​

DP κΈ°λ³Έν˜•μ΄λ‹€.

κ·Έλƒ₯ μœ„μ—κΊΌ λ‘κ°œ λΉ„κ΅ν•΄μ„œ ν•΄μ£Όλ©΄ λœλ‹€.

 

#include <iostream>
using namespace std;
int N, arr[501][501], ans;
int main(){
    cin>>N;
    for(int i=1; i<=N; i++){
        for(int j=1; j<=i; j++){
            cin>>arr[i][j];
            arr[i][j] += max(arr[i-1][j], arr[i-1][j-1]);
        }
    }
    for(int i=1; i<=N; i++){
        ans = max(arr[N][i], ans);
    }
    cout<<ans;
}