이 작업은 실제로 꽤 어렵습니다. 나의 임무는 Sarah가 자신의 가방 용량과 판매 가능한 품목을 고려할 때 얻을 수있는 최고의 행복을 찾아내는 것입니다. 새라는 총 무게가 최대 wkg 인 물품을 최대 3 개까지 운반 할 수있는 가방을 소지하고 있습니다. Sarah가 구입하는 모든 항목은 동시에 가방에 들어 있어야합니다. 예 : w = 97 items = [[17, 19], [22, 19], [65, 64], [21, 19], [27, 26], [19, 21], [58, 61], [43, 46], [1, 3], [44, 42], [22, 22], [52, 53], [10, 8], [37, 35], [60, 62], [42, 39], [36, 36], [62, 60], [50, 47], [62, 62], [47, 48], [15, 16], [12, 12], [6, 5], [30, 27], [52, 49], [30, 32], [3, 4], [21, 18], [58, 58], [43, 42], [50, 50], [41, 41], [60, 60], [55, 58], [64, 63], [32, 33], [11, 12], [11, 13], [46, 44], [22, 21], [20, 19], [47, 45], [24, 24], [35, 32], [28, 31], [14, 15], [35, 37], [9, 10], [23, 22], [45, 46], [34, 32], [34, 37], [37, 39], [42, 41], [59, 57], [24, 22], [15, 13], [33, 34], [3, 3], [55, 55]]
첫 번째 숫자는 항목의 무게입니다. 두 번째 숫자는 항목의 행복 값입니다. 누구나 이것을 계산하는 방법에 대한 아이디어가 있습니까?파이썬 : 배열의 합계를 찾으십시오.
-7
A
답변
-3
나는 가능한 97 개의 무게와 모든 3 개의 방해물 슬롯을 사용하여 [11, 13], [28, 31], [58, 61]
및 [28, 31], [34, 37], [35, 37]
아이템을 사용하여 105 가지 행복을 얻습니다.
# this allows for integers to be divided by integers and give a float result
# program is runnable in both python 2 and 3
from __future__ import division
from sys import exit
weight = 97
items = [[17, 19], [22, 19], [65, 64], [21, 19], [27, 26], [19, 21], [58, 61],
[43, 46], [1, 3], [44, 42], [22, 22], [52, 53], [10, 8], [37, 35], [60, 62],
[42, 39], [36, 36], [62, 60], [50, 47], [62, 62], [47, 48], [15, 16], [12, 12],
[6, 5], [30, 27], [52, 49], [30, 32], [3, 4], [21, 18], [58, 58], [43, 42],
[50, 50], [41, 41], [60, 60], [55, 58], [64, 63], [32, 33], [11, 12], [11, 13],
[46, 44], [22, 21], [20, 19], [47, 45], [24, 24], [35, 32], [28, 31], [14, 15],
[35, 37], [9, 10], [23, 22], [45, 46], [34, 32], [34, 37], [37, 39], [42, 41],
[59, 57], [24, 22], [15, 13], [33, 34], [3, 3], [55, 55]]
# this is about half of the problem: we must sort the items by the priority
# which which we want them. this would be their happiness to weight ratio
sorted_items = sorted(items, key=lambda item: item[1]/item[0], reverse=True)
happiness = int()
for item1 in range(len(sorted_items) - 2):
for item3 in range(item1 + 2, len(sorted_items)):
for item2 in range(item1 + 1, item3):
# try to use as much weight as possible, we don't want
# our bag to go underfilled with 3 efficient but light items
if (sorted_items[item1][0] +
sorted_items[item2][0] +
sorted_items[item3][0] <= weight):
# we haven't gone over weight! possible solution found!
happiness = max(sorted_items[item1][1] +
sorted_items[item2][1] +
sorted_items[item3][1], happiness)
print(happiness)
1
이것은 0/1 knapsack problem입니다. 가장 우아한 솔루션은 동적 프로그래밍입니다. 그것에 관한 강의는 here이고 해결책은 here입니다.
나는 해결책을보기 전에 강의를보고 코드를 작성하는 것이 좋습니다.
관련 문제
- 1. 은행 계좌 합계를 찾으십시오.
- 2. 파이썬 배열의 모든 일반적인 패턴을 찾으십시오
- 3. 배열의 합계를 더하기
- 4. PHP 배열의 합계를 얻으시오
- 5. 배열의 값을 찾으십시오
- 6. matlab 배열의 다항식을 찾으십시오
- 7. 세포 배열의 교차점을 찾으십시오
- 8. 1D 배열의 크기를 찾으십시오.
- 9. 배열의 모든 ID를 찾으십시오.
- 10. 다차원 배열의 차이점을 찾으십시오
- 11. 배열의 이진 표현을 찾으십시오.
- 12. PHP는 다차원 배열의 합계를 비교합니다.
- 13. 부 울린 식의 단순한 제품 합계를 찾으십시오.
- 14. 대용량 데이터 세트의 하위 집합 합계를 찾으십시오.
- 15. 실제 숫자 목록에서 최대 간격 합계를 찾으십시오.
- 16. 판매 된 제품과 제품 원가의 합계를 찾으십시오.
- 17. javasccript 객체 배열의 요소를 찾으십시오.
- 18. 자바 배열의 배열을 병렬로 찾으십시오.
- 19. 배열의 두 번째 요소를 찾으십시오.
- 20. 함수에서 C 배열의 크기를 찾으십시오.
- 21. 정렬 된 배열의 인덱스를 찾으십시오
- 22. Perl에서 해시 배열의 크기를 찾으십시오.
- 23. 파이썬 일치하는 배열을 찾으십시오
- 24. 파이썬 장치 디스크를 찾으십시오
- 25. 숫자의 파이썬 목록을 반올림하고 합계를 유지하십시오.
- 26. 배열의 모든 인접한 부분 배열의 합계를 저장하는 방법은 무엇입니까?
- 27. sum 메서드를 사용하여 배열의 합계를 구하십시오.
- 28. 입력 배열의 요소에서 합계를 가져 오는 중
- 29. 세션 배열의 모든 키의 합계를 찾습니다.
- 30. 배열의 사각형 영역에서 값의 합계를 계산하십시오.
숙제라고 생각하면 사실 그걸 알아 내고 그 과정에서 뭔가를 배우려고하지 않아야합니까? – isedev
@isedev 그건 가혹 하네. 아마도 Pheng-Khai Tan에는 Sarah라는 친구가 있는데, 쉽게 측정 할 수있는 행복의 가치와 함께 총 무게 * w * kg의 항목을 최대 3 개 보유 할 수 있습니다. – Veedrac
@ Pheng-KhaiTan 배낭을 사는 것이 좋습니다. 그러나 진지하게, 나는 당신에게 [숙제 질문을하고 질문하는 방법은 무엇입니까?] (http://meta.stackexchange.com/questions/10811/how-do-i-ask-and-answer-homework-questions)를 읽으시기 바랍니다. – Veedrac