[SWEA] 1952. [シミュレーションソフトウェア能力テスト]プール
6308 ワード
📚 質問する
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PpFQaAQMDFAUq
📖 に答える
これはソートの問題です.
利用券は4種類あります.
①1日利用券:1日利用可能.
②1ヶ月利用券:1ヶ月以内でご利用いただけます.1ヶ月利用券は毎月1日からです.
③3ヶ月利用券:3ヶ月連続でご利用いただけます.3ヶ月利用券は毎月1日からです.
(11月・12月にも3ヶ月利用券が使用可能/来年の利用券しか購入できないため、3ヶ月利用券は11月・12月・1月・2月期間では使用できません.)
④1年間使用券:1年間使用可能.年間利用券は毎年1月1日からです.
1年間使用した場合は開始時のみなので、最高価格で使用開始します.
1ヶ月目から1日券、1月券、3ヶ月券を使用している場合は、それぞれ呼び直します.
この場合、1日券と1ヶ月券を使用する場合、より高い価格の場合の料金が含まれます.
呼びながら時間をかける.1日券または1ヶ月券にさらに1ヶ月、3ヶ月券に3ヶ月加算します.
11月、12月でも3ヶ月分の利用券が使えますが、現在12月を超えると返却されます.
📒 コード#コード#
def recur(cur, fee):
global min_fee
if cur > min_fee: # 현재 요금이 업데이트 된 최소 요금보다 비싸면 return
return
if cur >= 12: # 12개월을 넘어서는 경우
min_fee = min(min_fee, fee) # 최소값 업데이트
return
if arr[cur] == 0:
recur(cur + 1, fee) # 이용하지 않으면 다음 월로 이동
else:
recur(cur + 1, fee + min(mon, day * arr[cur])) # 당일 요금은 이용 일만큼 곱한다.
recur(cur + 3, fee + mon_3) # 3달은 3달을 더해줘야 한다.
for tc in range(1, 1 + int(input())):
day, mon, mon_3, year = map(int, input().split())
arr = list(map(int, input().split()))
min_fee = year # 1년 요금은 처음에 넣고 최솟값으로 업데이트
recur(0, 0)
print(f'#{tc} {min_fee}')
🔍 結果
Reference
この問題について([SWEA] 1952. [シミュレーションソフトウェア能力テスト]プール), 我々は、より多くの情報をここで見つけました https://velog.io/@yunhlim/SWEA-1952.-모의-SW-역량테스트-수영장テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol