-
[KOITP] 폐지줍기자료구조 및 알고리즘/문제풀이 2017. 1. 9. 19:11
시간 제한 메모리 제한 제출 횟수 정답 횟수 (비율) 정답자 수 1.0 초 512 MB 1292 684 (53%) 584 < Comment >
폐지줍기는 비교적 쉬운 문제였습니다. DP 정의는 i,j 인덱스까지 이동하였을 경우의 최대 폐지 수집값으로 정의하고 풀었습니다. 올수 있는 위치가 왼쪼과 오른쪽으로 고정되어있으므로 어렵지 않게 풀 수 있었습니다.
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.StringTokenizer; public class GarbageCollector { public static int N = 0; public static int map[][] = null; public static int dp[][] = null; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); N = Integer.parseInt(br.readLine()); map = new int[N][N]; dp = new int[N][N]; StringTokenizer st = null; for (int i = 0 ; i < N ; i++) { st = new StringTokenizer(br.readLine()); for (int j = 0 ; j < N ; j++) { map[i][j] = Integer.parseInt(st.nextToken()); } } int sum = 0; for (int i = 0 ; i < N ; i++) { sum = sum + map[0][i]; dp[0][i] = sum; } sum = 0; for (int i = 0 ; i < N ; i++) { sum = sum + map[i][0]; dp[i][0] = sum; } for (int i = 1 ; i < N ; i++) { for (int j = 1 ; j < N ; j++) { dp[i][j] = Math.max(dp[i][j-1], dp[i-1][j]) + map[i][j]; } } bw.write("" + dp[N-1][N-1]); bw.flush(); bw.close(); } }