- 문제
- 링크 : https://www.acmicpc.net/problem/1823
- 최대 수확량 구하기
- 조건
- 벼의 이익 : (벼의 가치) x (수확순서)
- 밭의 양쪽에 있는 벼만 수확 가능
- 입력
- 첫번째 줄
- N : 1xN 벼 농장의 크기 (1 ≤ N ≤ 3,000)
- 두번째 줄 ~ (N+1)
- v(i) : 벼의 가치 (1 ≤ v(i) ≤ 1,000)
- 첫번째 줄
- 출력
- 벼수확의 최대 이익
- 로직 1)
- DFS
- DP
- 투포인터
package backjoon;
import java.util.Scanner;
public class No1823 {
static int[] values;
static int[][] dp;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
values = new int[N];
dp = new int[N][N];
int left = 0, right = N-1;
int sum = 0;
// N개의 가치 입력
for(int i=0; i<N; i++) {
values[i] = sc.nextInt();
}
sum = dfs(left, right,1);
System.out.println(sum);
sc.close();
}
// 투포인터, dfs, dp
static int dfs(int left, int right, int i) {
// 투포인터
if(left>right) return 0;
// dp
if(dp[left][right] != 0) return dp[left][right];
int tmp_left = dfs(left+1, right, i+1) + values[left]*i;
int tmp_right = dfs(left, right-1, i+1) + values[right]*i;
dp[left][right] = Math.max(tmp_left, tmp_right);
return dp[left][right];
}
}
- 결과
- 성공
'코딩테스트 > 백준' 카테고리의 다른 글
[Java] 백준 1764번 - 듣보잡 (0) | 2023.06.10 |
---|---|
[Java] 백준 3020번 - 개똥벌레 (0) | 2023.05.30 |
[Java] 백준 2473번 - 세 용액 (0) | 2023.05.26 |
[Java] 백준 13164번 - 행복 유치원 (0) | 2023.05.22 |
[Java] 백준 1092번 - 배 (0) | 2023.05.20 |