백준 11501번 주식
사용한 알고리즘: DFS
dfs를 돌리면서 남은 기간중 가장 큰 값을 계속 최신화해주었습니다.
temp = 남은 기간중 최대값 / point = 가장 큰 값의 위치 이라 놓고,
현 위치부터 point까지 for 구문을 돌리며
구하고자 하는 값에 temp-arr[i] 값을 더해주었습니다.
만약 point != N-1(맨끝) 이면 다시 dfs 를 돌려주었습니다.
주의할 점은 구하고자 하는 값을 long long으로 놓는 것이었습니다.
dfs를 돌리면서 남은 기간중 가장 큰 값을 계속 최신화해주었습니다.
temp = 남은 기간중 최대값 / point = 가장 큰 값의 위치 이라 놓고,
현 위치부터 point까지 for 구문을 돌리며
구하고자 하는 값에 temp-arr[i] 값을 더해주었습니다.
만약 point != N-1(맨끝) 이면 다시 dfs 를 돌려주었습니다.
주의할 점은 구하고자 하는 값을 long long으로 놓는 것이었습니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <bits/stdc++.h> | |
using namespace std; | |
#define pii pair<int, int> | |
int T, N; | |
int arr[1000001]; | |
long long ans; | |
long long GetAns(int curr){ | |
long long result = 0; | |
int temp = 0; | |
int Point = 0; | |
for (int i = curr; i < N; ++i) | |
if(arr[i]>=temp){ | |
temp = arr[i]; | |
Point= i; | |
} | |
for (int i = curr; i < Point; ++i) | |
result += (temp-arr[i]); | |
if(Point<N-1) result+=GetAns(Point+1); | |
return result; | |
} | |
int main(){ios_base::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL); | |
cin >> T; | |
while(T--){ | |
memset(arr,0,sizeof(arr)); | |
cin >> N; | |
for (int i = 0; i < N; ++i) | |
cin >> arr[i]; | |
cout << GetAns(0) << '\n'; | |
} | |
return 0; | |
} |
댓글
댓글 쓰기
긴 글 읽어주셔서 감사합니다.
궁금한게 있으시다면 댓글 달아주세요!