200919土[BOJ]10844
10286 ワード
BOJ 10844
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
br.close();
long f[][] = new long[N+1][10];
for(int i=1;i<=9;i++) {
f[1][i] = 1;
}
for(int i=2;i<=N;i++) {
for(int j=0;j<10;j++) {
if(j==0) {
f[i][j] = f[i-1][j+1] % 1000000000;
} else if (j==9) {
f[i][j] = f[i-1][j-1] % 1000000000;
} else {
f[i][j] = (f[i-1][j-1] + f[i-1][j+1]) % 1000000000;
}
}
}
long sum = 0;
for(int i=0;i<10;i++) {
sum += f[N][i];
}
System.out.println(sum%1000000000);
}
}
これは二重配列を利用したDP問題である.ルールを見つけ、DPで解決する方法を見つけます.
このような問題であれば、
각 자리가 1씩 차이나는 계단수의 특성
も利用できます💡 끝자리
を基準としてデュアルアレイを作成する考え方💡これは重要です.一人では感じられないので、他の人の解答を参考にして、コードしていましたが、ずっと間違いがあって、結果が出てきたので、これはなぜかと思って、最後の
sum % 1000000000
はくれませんでした.白準問題では,なぜ常に数値に割り当てられた残りの部分を印刷させるのか,まだ疑問がある.資料型の範囲を超えているわけではないし...
Reference
この問題について(200919土[BOJ]10844), 我々は、より多くの情報をここで見つけました https://velog.io/@kyuhyunhan/200919-토-BOJ-10844テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol