第16週#14501退社
5136 ワード
質問する
に答える
ソリューション
dp[i]=max(p[i]+dp[t[i]+i]],max_value)dp[i] = max(p[i] + dp[t[i]+i]], max\_value)dp[i]=max(p[i]+dp[t[i]+i]],max_value)
ソリューション
dp[i]=max(p[i]+dp[t[i]+i]],max_value)dp[i] = max(p[i] + dp[t[i]+i]], max\_value)dp[i]=max(p[i]+dp[t[i]+i]],max_value)
後から後まで、各コンサルティング(現在のコンサルティング日の利益p[i]+現代コンサルティング終了日からの最大利益dp[t[i]+i)について算出する.次に計算される各値から最上位値を抽出
に感銘を与える
これは私が最近アルゴリズムを解いたときに感じたことです.
想像もつかない変なアルゴリズムで乾杯!解くというより.
基本的にはすべての状況を計算します.
これはどんなアルゴリズムで改善された問題だと思います.
DPも計算を部分的に分けて、分割した部分を再利用して改善する、そんな壮大な点火式!新しい!数学!違うみたい...(気まずい)
に答える
コミットコード
n = int(input()) # 전체 상담 갯수
t = []
p = []
dp = [0] * (n+1) # dynamic programming을 위한 1차원 dp 테이블 초기화
max_value = 0 #뒤에서부터 계산할때, 현재까지의 최대 상담 금액에 해당하는 변수
for _ in range(n) :
x, y = map(int, input().split())
t.append(x)
p.append(y)
# 리스트를 뒤에서부터 거꾸로 확인
for i in range(n-1, -1, -1) :
time = t[i] + i
# 상담이 기간 안에 끝나는 경우
if time <= n :
# 점화식에 맞게, 현재까지의 최고 이익 계산
dp[i] = max(p[i] + dp[time], max_value)
max_value = dp[i]
# 상담이 기간을 벗어나는 경우
else :
dp[i] = max_value
print(max_value)
出力コードの理解
Reference
この問題について(第16週#14501退社), 我々は、より多くの情報をここで見つけました
https://velog.io/@yesterdaykite/16주차
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
n = int(input()) # 전체 상담 갯수
t = []
p = []
dp = [0] * (n+1) # dynamic programming을 위한 1차원 dp 테이블 초기화
max_value = 0 #뒤에서부터 계산할때, 현재까지의 최대 상담 금액에 해당하는 변수
for _ in range(n) :
x, y = map(int, input().split())
t.append(x)
p.append(y)
# 리스트를 뒤에서부터 거꾸로 확인
for i in range(n-1, -1, -1) :
time = t[i] + i
# 상담이 기간 안에 끝나는 경우
if time <= n :
# 점화식에 맞게, 현재까지의 최고 이익 계산
dp[i] = max(p[i] + dp[time], max_value)
max_value = dp[i]
# 상담이 기간을 벗어나는 경우
else :
dp[i] = max_value
print(max_value)
Reference
この問題について(第16週#14501退社), 我々は、より多くの情報をここで見つけました https://velog.io/@yesterdaykite/16주차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol