728x90
https://www.acmicpc.net/problem/1890
처음에는 재귀함수를 썼더니 시간초과가 났다..
포문을 돌려서 dp의 값을 더해준다!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int arr[][];
static long dp[][];
static int n;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
arr = new int[n + 1][n + 1];
dp = new long[n + 1][n + 1];
StringTokenizer st;
for (int i = 1; i <= n; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 1; j <= n; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
dp[1][1]=1;
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) {
int plus = arr[i][j];
if(plus==0) break;
if(i+plus<=n) dp[i+plus][j]+=dp[i][j];
if(j+plus<=n) dp[i][j+plus]+=dp[i][j];
}
}
System.out.println(dp[n][n]);
}
static void dpFunc(int x, int y) {
dp[x][y]++;
if (x == n && y == n)
return;
if (x + arr[x][y] <= n)
dpFunc(x + arr[x][y], y);
if (y + arr[x][y] <= n)
dpFunc(x, y + arr[x][y]);
}
}
'Java' 카테고리의 다른 글
[백준 1965] 상자넣기 (JAVA) (0) | 2023.04.18 |
---|---|
[백준 9465] 스티커 (JAVA) (0) | 2023.04.17 |
[JAVA] BufferedReader 는 런타임에러, Scanner는 정답인 이유 (0) | 2023.04.16 |
[백준 11049] 행렬 곱셈 순서 (JAVA) (0) | 2023.04.13 |
[백준 1717] 집합의 표현 (JAVA) (0) | 2023.04.11 |