https://www.acmicpc.net/problem/19942
19942λ²: λ€μ΄μ΄νΈ
μμ¬λ£ Nκ° μ€μμ λͺ κ°λ₯Ό μ νν΄μ μ΄λ€μ μμλΆ(λ¨λ°±μ§, νμνλ¬Ό, μ§λ°©, λΉνλ―Ό)μ΄ μΌμ μ΄μμ΄ λμ΄μΌ νλ€. μλ νμ μ μλ 6κ°μ§μ μμ¬λ£ μ€μμ λͺ κ°λ₯Ό μ νν΄μ μ΄λ€μ μμλΆμ κ°
www.acmicpc.net
λ¬Έμ
μμ¬λ£ Nκ° μ€μμ λͺ κ°λ₯Ό μ νν΄μ μ΄λ€μ μμλΆ(λ¨λ°±μ§, νμνλ¬Ό, μ§λ°©, λΉνλ―Ό)μ΄ μΌμ μ΄μμ΄ λμ΄μΌ νλ€. μλ νμ μ μλ 6κ°μ§μ μμ¬λ£ μ€μμ λͺ κ°λ₯Ό μ νν΄μ μ΄λ€μ μμλΆμ κ°κ° ν©μ΄ μ΅μ 100, 70, 90, 10κ° λλλ‘ νλ κ²½μ°λ₯Ό μκ°ν΄λ³΄μ. μ΄ κ²½μ° λͺ¨λ μ¬λ£λ₯Ό μ ννλ©΄ μ½κ² ν΄κ²°λμ§λ§, μ°λ¦¬λ 쑰건μ λ§μ‘±μν€λ©΄μλ λΉμ©μ΄ μ΅μκ° λλ μ νμ νλ €κ³ νλ€.
μ¬λ£λ¨λ°±μ§μ§λ°©νμνλ¬ΌλΉνλ―Όκ°κ²©1 | 30 | 55 | 10 | 8 | 100 |
2 | 60 | 10 | 10 | 2 | 70 |
3 | 10 | 80 | 50 | 0 | 50 |
4 | 40 | 30 | 30 | 8 | 60 |
5 | 60 | 10 | 70 | 2 | 120 |
6 | 20 | 70 | 50 | 4 | 40 |
μλ₯Ό λ€μ΄, μμ¬λ£ 1, 3, 5λ₯Ό μ ννλ©΄ μμλΆμ 100, 145, 130, 10μΌλ‘ 쑰건μ λ§μ‘±νμ§λ§ κ°κ²©μ 270μ΄ λλ€. λμ 2, 3, 4λ₯Ό μ ννλ©΄ μμλΆμ ν©μ 110, 130, 90, 10, λΉμ©μ 180μ΄ λλ―λ‘, μμ λ°©λ²λ³΄λ€λ λ λμ μ νμ΄ λλ€.
μ λ ₯μΌλ‘ μμ¬λ£ νκ° μ£Όμ΄μ‘μ λ, μ΅μ μμμ κΈ°μ€μ λ§μ‘±νλ μ΅μ λΉμ©μ μμ¬λ£ μ§ν©μ μ°ΎμμΌ νλ€.

λ¬Έμ νμ΄
import sys
from itertools import combinations
n=int(sys.stdin.readline())
p,f,s,v=map(int, sys.stdin.readline().strip().split(' '))
nutri=[]
for _ in range(n):
nutri.append(list(map(int, sys.stdin.readline().strip().split(' '))))
numbers=list(range(1,n+1))
min_cost=1e9
min_idx={}
for pick in range(1,n+1):
pick_idx=list(combinations(numbers, pick))
isAllPass=True
for picked in pick_idx:
mp, mf, ms, mv = 0, 0, 0, 0
tmp_cost = 0
for idx in picked:
mp+=nutri[idx-1][0]
mf+=nutri[idx-1][1]
ms+=nutri[idx-1][2]
mv+=nutri[idx-1][3]
tmp_cost+=nutri[idx-1][4]
if mp >= p and mf >= f and ms >= s and mv >= v:
if min_cost >= tmp_cost:
min_cost = tmp_cost
if min_cost in min_idx.keys():
min_idx[min_cost].append(picked)
else:
min_idx[min_cost]=[]
min_idx[min_cost].append(picked)
else:
isAllPass = False
# λͺ¨λ μΈλ±μ€λ₯Ό λ½λ κ²½μ°μ μκ° μ‘°κ±΄μ λ§μ‘±ν λ λ ν° κ°μ νμν νμμμ
if isAllPass:
break
if min_cost==1e9:
print(-1)
else:
print(min_cost)
min_idx[min_cost].sort()
print(*min_idx[min_cost][0], sep=' ')
- Nμ΄ μ΅λ 15μ΄λ―λ‘ μμ νμμΌλ‘ νμ΄λ μκ°μ΄κ³Όκ° λ°μνμ§ μλλ€.
- Nκ°μ μν μΈλ±μ€ μ€ 1λΆν° Nκ°λ₯Ό λ½λ μ‘°ν©μ λͺ¨λ νμνλ©΄μ ν΄λΉ μ‘°ν©μΌλ‘ 쑰건μ λ§μ‘±ν μ μλμ§ νμΈνλ€.
- 쑰건μ λ§μ‘±νλ€λ©΄ ν΄λΉ μ‘°ν©μ λΉμ©μ΄ μ΄μ κ³μ°μμ ꡬν μ΅μ λΉμ©λ³΄λ€ μκ±°λ κ°λ€λ©΄ μ΅μ λΉμ©κ³Ό μ΅μ λΉμ©μ ꡬμ±νλ μν μΈλ±μ€μΈ min_costμ min_idxλ₯Ό μ λ°μ΄νΈνλ€.
- κ·Έλ¦¬κ³ νΉμ nκ°λ₯Ό λ½μ λ, λͺ¨λ μ‘°ν©μ΄ 쑰건μ λ§μ‘±νλ€λ©΄ κ·Έ μ΄μμ μλ₯Ό λ½λ κ² λν λͺ¨λ λ§μ‘±νλ€λ λ»μ΄λ―λ‘ λ½μ κ°μ nκ°λ₯Ό λ μ΄μ νμνμ§ μκ³ forλ¬Έμ λΉ μ Έλμ¨λ€.
- μ΅μ λΉμ©μ ꡬμ±νλ μν μΈλ±μ€λ₯Ό ꡬνλ κ³Όμ μμ μ£Όμν μ μ ν΄λΉνλ μν μΈλ±μ€κ° μ¬λ¬ κ°μΌ κ²½μ° μ¬μ μμΌλ‘ κ°μ₯ μμλ μν μΈλ±μ€λ₯Ό μΆλ ₯ν΄μΌ νκΈ° λλ¬Έμ κ° μ΅μ λΉμ©μ λν μν μΈλ±μ€λ₯Ό λμ λ리 ννλ‘ μ μ₯ν΄λκ³ , μ΅μ’ μ μΌλ‘ ꡬν΄μ§ μ΅μ λΉμ©μ ν΄λΉνλ μν μΈλ±μ€λ€μ μ λ ¬ν΄μ€ λ€μ κ°μ₯ μμ μ€λ μμλ₯Ό μΆλ ₯ν΄μ€μΌ νλ€.
'μκ³ λ¦¬μ¦ > λΈλ£¨νΈν¬μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€ 1062 π₯] κ°λ₯΄μΉ¨ (0) | 2023.09.28 |
---|---|
[λ°±μ€ 2304 π₯] μ°½κ³ λ€κ°ν (1) | 2023.09.15 |
[λ°±μ€ 1107 π₯] 리λͺ¨μ»¨ (0) | 2023.08.21 |