白駿10844号簡単な階段数-Nodejs
同ポスターは、白準10844号の軽い階段水水泳を描いている.質問リンク
コードはjavascriptで書かれています.
階数: Nの場合、長さNの階段数をいくつ求める. 0で始まる数字は階段数ではありません.
N=2の場合、可能な次数を考えてみましょう.
10、21、12、32、23、43、34、54、45、65、56、76、67、87、78、98があります.
これらの数字を見ると、10桁は事の数によって決まる単語です.
逆に
このように、以前の数字がどのような値だったかによって、得られる答えが決まりました.つまり、先桁(部分和)を求めるには、
N=3の場合は例で説明します.
上の表から見ると、Nが3の場合、可能な組み合わせは32個あります.j=0の場合、自分+1人10(「1」+「0」)しかできません. j=1の場合、自分+1人21(「2」+「1」)しかできません. jが2~8の間の自然数の場合、自己+1,-1とすることができる. jが9の場合、自分-1人89(「8」+「9」)しかいません. j=0の場合
dp[3][0]は j=1~8の場合
jが1〜8のとき、観察の組み合わせは、 j=9の場合
dpが確認できる[3][9]は j=0、9の場合、それぞれdp[i][j]=dp[i-1][j-1]、dp[i][j]=dp[i-1][j+1となる.
逆に、j=1~8の場合、dp[3][j]=dp[2][j-1]+dp[2][j+1]となる.
インデックス-1と10の要素がないためです.
したがって,論理を点火式として以下に示す.
JSの比較演算子を用いて,上の論理を次の点化式として表すことができる.
てんかしき
DP[i][j] = DP[i-1][j-1] || 0 + DP[i-1][j+1] || 0
(0 ≤ j ≤ 9)
コードはjavascriptで書かれています.
質問する
問題の説明
인접한 모든 자리의 차이가 1
因数(EX.455656)入力
[첫째 줄]
: N (1 ≤ N ≤ 100)しゅつりょく
[첫째 줄]
:正解%1億円に答える
論理的説明
N=2の場合、可能な次数を考えてみましょう.
10、21、12、32、23、43、34、54、45、65、56、76、67、87、78、98があります.
これらの数字を見ると、10桁は事の数によって決まる単語です.
일의 자리 수가 0
の場合、1の違いが生じる自然数は1のみである.逆に
2부터 8까지 자연수
自分の+1,-1の数字が出てくる.例えば、作業ビット数が8の場合、可能なステップ数は78,98である.일의 자리 수가 9
の場合、1の違いが生じる自然数は8のみである.このように、以前の数字がどのような値だったかによって、得られる答えが決まりました.つまり、先桁(部分和)を求めるには、
DP로 풀이
だけでよい.例の説明
N=3の場合は例で説明します.
上の表から見ると、Nが3の場合、可能な組み合わせは32個あります.
[N=1]일 때
1~9の間には様々な自然水があります.0は自然数ではなく、不可能です.[N=2]일 때
[N=3]일 때
dp[3][0]は
dp[2][1](210) + '0'
jが1〜8のとき、観察の組み合わせは、
dp[3][j] = dp[2][j-1] + dp[2][j+1]
であると判定される.dpが確認できる[3][9]は
dp[2][8](78, 98) + '9'
逆に、j=1~8の場合、dp[3][j]=dp[2][j-1]+dp[2][j+1]となる.
インデックス-1と10の要素がないためです.
したがって,論理を点火式として以下に示す.
てんかしき
JSの比較演算子を用いて,上の論理を次の点化式として表すことができる.
てんかしき
DP[i][j] = DP[i-1][j-1] || 0 + DP[i-1][j+1] || 0
(0 ≤ j ≤ 9)
完全なコード
const input = require('fs').readFileSync('/dev/stdin').toString();
const N = Number(input);
const DP = new Array(N)
for (let i=0; i<N; i++) {
DP[i] = new Array(10).fill(0)
}
for (let i=1; i<=9; i++) {
DP[0][i] = 1;
}
for (let i=1; i<N; i++) {
for (let j=0; j<=9; j++) {
DP[i][j] = (DP[i-1][j-1] || 0) + (DP[i-1][j+1] || 0) % 1000000000;
}
}
const result = DP[N - 1].reduce((acc, curr) => {
return (acc + curr) % 1000000000;
}, 0);
console.log(result);
Reference
この問題について(白駿10844号簡単な階段数-Nodejs), 我々は、より多くの情報をここで見つけました https://velog.io/@dev-redo/백준-10844번-쉬운-계단-수-node.jsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol