[BOJ/Python]数列2491
5884 ワード
この問題はダイナミックプログラミングによって解決された.以前の値と比較して、dpを更新し、その最大値を見つけて出力します.最初は問題を正しく読んでいなかったので、前<=後、前>=後の場合はすべてdpを表すのではなく、前<=後のdpのみを表すので、誤って処理された.この問題についての点火式は以下の通りである.
dp[n]=max(dp[n], dp[n-1]+1)
<=の場合も>=の場合も解く必要があるため、dp配列を2次元と宣言し、dp[i][0]が<=を格納する場合、dp[i][1]が>=を格納する場合.->arr[i]がarr[i-1]以上である場合、dp[0][i]はdp[0][i]およびdp[0][i-1]+1のより大きな値に更新される.
->arr[i]がarr[i-1]以下である場合、dp[1][i]はdp[1][i]およびdp[1][i-1]+1のより大きな値に更新される.
Code n=int(input())
arr=list(map(int, input().split()))
dp=[[1]*n for _ in range(2)]
for i in range(1,n):
if arr[i]>=arr[i-1]:
dp[0][i]=max(dp[0][i], dp[0][i-1]+1)
if arr[i]<=arr[i-1]:
dp[1][i]=max(dp[1][i], dp[1][i-1]+1)
print(max(max(dp[0]), max(dp[1])))
Reference
この問題について([BOJ/Python]数列2491), 我々は、より多くの情報をここで見つけました
https://velog.io/@xx0hn/BOJ-Python-2491번-수열
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
n=int(input())
arr=list(map(int, input().split()))
dp=[[1]*n for _ in range(2)]
for i in range(1,n):
if arr[i]>=arr[i-1]:
dp[0][i]=max(dp[0][i], dp[0][i-1]+1)
if arr[i]<=arr[i-1]:
dp[1][i]=max(dp[1][i], dp[1][i-1]+1)
print(max(max(dp[0]), max(dp[1])))
Reference
この問題について([BOJ/Python]数列2491), 我々は、より多くの情報をここで見つけました https://velog.io/@xx0hn/BOJ-Python-2491번-수열テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol