BOJ 5721あめ拾い大会
16306 ワード
質問する
問題の要約は難しいですが、リンクを参照してください.
に近づく
d[N]=MAX(d[N−2]+a[N],d[N−1])d[N] = MAX(d[N-2]+a[N], d[N-1])d[N]=MAX(d[N−2]+a[N],d[N−1])
e[N]=MAX(e[N−2]+e[N],e[N−1])e[N] = MAX(e[N-2]+e[N], e[N-1])e[N]=MAX(e[N−2]+e[N],e[N−1])
コード#コード#
import java.io.*;
import java.util.*;
class baek__5721 {
static int[][] map;
static int[][] d;
static int[][] d2;
static int go(int n, int m) {// 열에서 큰거
if (m < 0)
return 0;
if (d[n][m] != -1)
return d[n][m];
d[n][m] = Math.max(go(n, m - 2) + map[n][m], go(n, m - 1));
return d[n][m];
}
static int go2(int n, int m) {
if (n < 0)
return 0;
if (d2[n][m] != -1)
return d2[n][m];
d2[n][m] = Math.max(go2(n - 2, m) + go(n, m), go2(n - 1, m));
return d2[n][m];
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
while (true) {
String[] temp = br.readLine().split(" ");
int r = Integer.parseInt(temp[0]);
int c = Integer.parseInt(temp[1]);
if (r == 0 && c == 0)
break;
map = new int[r][c];
d = new int[r][c];
d2 = new int[r][c];
for (int i = 0; i < r; i++) {
temp = br.readLine().split(" ");
for (int j = 0; j < c; j++) {
map[i][j] = Integer.parseInt(temp[j]);
d[i][j] = -1;
d2[i][j] = -1;
}
}
sb.append(go2(r - 1, c - 1) + "\n");
}
System.out.print(sb);
}
}
Reference
この問題について(BOJ 5721あめ拾い大会), 我々は、より多くの情報をここで見つけました https://velog.io/@since-1994/DP-BOJ-5721-사탕-줍기-대회テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol