[백준] 29792번 규칙적인 보스돌이 (파이썬)

dongEon·2024년 6월 21일
0

문제링크: https://www.acmicpc.net/problem/29792

문제해결 아이디어

  • 각각의 캐릭터당 최대 보상으로 보스를 잡는 dp를 생성하고 최대 보상값을 res에 저장
  • res를 내림차순으로 정렬해서 m번째 캐릭터까지 합하여 정답출력
  • 각각의 캐릭터 별로 보스를 잡는 데 걸리는 시간을 구한다.
  • dp는 보스 종류, 15분(900초)로 구성한다.

소스코드

import sys
input = sys.stdin.readline

n, m, k = map(int, input().split())
# 캐릭터 개수, 하루에 사용할 캐릭터 수, 보스 종류

damage = [] # 캐릭터 데미지

for _ in range(n):
    damage.append(int(input()))

boss = [] # 체력, 보상

res = []

for _ in range(k):
    boss.append(list(map(int, input().split())))

for i in range(n):
    time = [0]
    for hp, worth in boss:
        h = hp // damage[i]
        if hp % damage[i]:
            h += 1

        time.append(h)

    dp = [[0] * (901) for _ in range(k+1)]

    for a in range(1, k+1):
        for b in range(1, 901):
            if b >= time[a]:
                dp[a][b] = max(dp[a-1][b], boss[a-1][1] + dp[a-1][b-time[a]]) # 현재보스를 잡지 않을 경우, 현재 보스를 잡을 경우(현재 보스 보상 + 걸리는 시간을 뺀 이전 보상 최대값)
            else:
                dp[a][b] = dp[a-1][b]

    res.append(dp[k][-1])

res.sort(reverse=True)

print(sum(res[:m]))
profile
개발 중에 마주한 문제와 해결 과정, 새롭게 배운 지식, 그리고 알고리즘 문제 해결에 대한 다양한 인사이트를 공유하는 기술 블로그입니다

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN