BOJ 11057上り坂数
4488 ワード
https://www.acmicpc.net/problem/11057
1秒、256 MBメモリ
input : N (1 <= N <= 1,000) output :
出力長さNの上り坂数を10007の残数で割った. 条件:上り坂数=数字の位置を昇順に並べた数. 隣接数が同じでも昇順に並べます. の数はゼロから始まることができます. 10844題とあまり違わない
今回はゼロを含めることができ、減算する必要はありません.
数字の末尾が0の場合、次の数字は10種類あります.
反復文ですべてのdpに入るとき+1をする
数字の末尾が1なら次の9種類...
2の場合は8種類あります.
...
9の場合は1種類あります.
繰り返しで埋め尽くせばいい
カラムの値を繰り返す必要があるため、3回ループする必要があります.
結果は1000行目まで生成されるので、999行目まで繰り返してください.
1秒、256 MBメモリ
input :
出力
今回はゼロを含めることができ、減算する必要はありません.
ポイント。
数字の末尾が0の場合、次の数字は10種類あります.
反復文ですべてのdpに入るとき+1をする
数字の末尾が1なら次の9種類...
2の場合は8種類あります.
...
9の場合は1種類あります.
繰り返しで埋め尽くせばいい
import sys
T = int(sys.stdin.readline())
dp = [[0] * 10 for _ in range(1001)]
for i in range(10):
dp[1][i] = 1
for x in range(1, 1000):
for y in range(10):
for k in range(y, 10):
dp[x + 1][k] += 1 * dp[x][y]
res = 0
for i in range(10):
res += dp[T][i]
print(res % 10007)
一行を探して入る.カラムの値を読み込むカラムの値を繰り返す必要があるため、3回ループする必要があります.
結果は1000行目まで生成されるので、999行目まで繰り返してください.
Reference
この問題について(BOJ 11057上り坂数), 我々は、より多くの情報をここで見つけました https://velog.io/@jsin2475/BOJ-11057-오르막-수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol