BOJ 1890ジャンプ
リンク
https://www.acmicpc.net/problem/1890
質問する
N×Nゲームボードに数字が書いてあります.このゲームの目標は、一番左上から一番右下にジャンプし、ルールに従って行うことです.
各セルの数値は、現在のセルから到達できる距離を表します.右または下にのみ移動する必要があります.0はプロセスをブロックする終点ではなく、現在のセルの数値に従って常に右または下に移動します.一度踊るときは、Uターンしてはいけません.すなわち,1つの格子から右へジャンプする場合と下へジャンプする場合の2つしか存在しない.
プログラムを作成し、ルールに従って左上から右下に移動できるパス数を求めます.
に近づく
dpで近づく.
N×Nゲームボードに数字が書いてあります.このゲームの目標は、一番左上から一番右下にジャンプし、ルールに従って行うことです.
各セルの数値は、現在のセルから到達できる距離を表します.右または下にのみ移動する必要があります.0はプロセスをブロックする終点ではなく、現在のセルの数値に従って常に右または下に移動します.一度踊るときは、Uターンしてはいけません.すなわち,1つの格子から右へジャンプする場合と下へジャンプする場合の2つしか存在しない.
プログラムを作成し、ルールに従って左上から右下に移動できるパス数を求めます.
に近づく
dpで近づく.
コード#コード# bool isInBound(int boardSize, int r, int c){
return 0<=r && r<boardSize && 0<=c && c<boardSize;
}
long long recurs(int boardSize, int r, int c){
if(dp[r][c])
return dp[r][c];
dp[r][c] = 0;
for(int k=1; k<10; k++){
if(isInBound(boardSize, r-k, c) && board[r-k][c] == k)
dp[r][c] += recurs(boardSize, r-k, c);
if(isInBound(boardSize, r, c-k) && board[r][c-k] == k)
dp[r][c] += recurs(boardSize, r, c-k);
}
return dp[r][c];
}
dp[0][0]を1に初期化し,到達座標呼び出しrecurs()関数を解くことができる.
Reference
この問題について(BOJ 1890ジャンプ), 我々は、より多くの情報をここで見つけました
https://velog.io/@jasik15/BOJ-1890-점프
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
bool isInBound(int boardSize, int r, int c){
return 0<=r && r<boardSize && 0<=c && c<boardSize;
}
long long recurs(int boardSize, int r, int c){
if(dp[r][c])
return dp[r][c];
dp[r][c] = 0;
for(int k=1; k<10; k++){
if(isInBound(boardSize, r-k, c) && board[r-k][c] == k)
dp[r][c] += recurs(boardSize, r-k, c);
if(isInBound(boardSize, r, c-k) && board[r][c-k] == k)
dp[r][c] += recurs(boardSize, r, c-k);
}
return dp[r][c];
}
Reference
この問題について(BOJ 1890ジャンプ), 我々は、より多くの情報をここで見つけました https://velog.io/@jasik15/BOJ-1890-점프テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol