2개의 댓글이 있습니다.
-
-
skylife927 -
그리디로 풀었습니다.
dp로 하기 위해 이전의 값을 기억하도록 값을 저장하는 코드를 추가햇는데요. 그래도 안되네요 ㅋㅋvoid dp(int N){ //bottom up 방식으로 DP를 세워보자. //2N-2부터 N-1까지는 위, 오른쪽 위 sum = arr[2*N-2][0]; int x=0; for(int i=2*N-2; i > N-1; i--){ // 둘 중 큰것을 선택한다. 의미는 x값을 업데이트 한다. //arr[i-1][x] arr[i-1][x+1] if(arr[i-1][x] + arr[i][x] > arr[i-1][x+1] + arr[i][x]){ sum += arr[i-1][x]; arr[i-1][x] += arr[i][x]; } else { sum += arr[i-1][x+1]; arr[i-1][x+1] += arr[i][x]; x+=1; } } //N-1부터 0까지는 왼쪽 위, 위 규칙 for(int i=N-1; i>=0; i--){ // arr[i-1][x-1] arr[i-1][x] // x== 0이면 조취를 취해야 한다. 어떤 조취냐 // 무조건 첫번쨰껏을 끝까지 쭈욱 더해야 한다. 그리고 한방에 나가자 if(x==0){ for(; i>=0; i--){ sum+=arr[i-1][0]; } break; } if(arr[i-1][x-1] + arr[i][x] > arr[i-1][x] + arr[i][x]){ sum += arr[i-1][x-1]; arr[i-1][x-1] += arr[i][x]; x-=1; } else { sum += arr[i-1][x]; arr[i-1][x] += arr[i][x]; } } }
8년 전 link
-
-
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
skylife927
https://algospot.com/judge/problem/read/DIAMONDPATH
1. 입력을 배열에 받는다.
2. 맨 마지막 지점에서부터 위로 올라온다.
3. 마지막에서 가운데까지는 위와 오른쪽위
4. 가운데에서 맨 위까지는 왼쪽 위와 위의 값을 비교하여
5. 가장 큰값을 sum에 대입하여 출력한다.
8년 전