코드 너겟
그것은의 그것이 가상의 상황 금요일 저녁, 당신은 당신의 마음에 드는 취미에 참여하는 일반 골프를 치는 친구를 통해 초대했습니다 : 코드 골프. 그러나 이것은 두뇌 유출 작업이므로 그룹에서 두뇌 음식을 선택해야 코드에서 최대한 많은 골프를 즐길 수 있습니다.
이제 모든 사람이 가장 좋아하는 간식은 치킨 너겟이지만 문제가 있습니다. 모든 사람의 요구를 충족시키는 단일 팩은 없습니다. 따라서 이미 골프 분위기에 빠졌으므로 모든 사람의 너겟 요구를 충족시키기 위해 구매해야 할 팩을 정확히 파악하는 프로그램을 만들기로 결정했습니다.
치킨 너겟 팩 크기는 어디에나 있으며, 세계에서 거주하는 지역에 따라 표준 크기도 변경됩니다. 그러나 가장 가까운 [너겟을 제공하는 장소] 에는 다음과 같은 크기의 너겟 팩이 있습니다.
4, 6, 9, 10, 20, 40
이제 너겟의 특정 조합을 주문할 수 없다는 것을 알 수 있습니다. 예를 들어, 정확히 11
같은 조합이 없기 때문에 너겟은 불가능합니다 11
. 그러나 43
1 팩 20
, 1 팩 10
, 1 팩 9
및 1 팩을 얻어서 만들 수 있습니다 4
.
20 + 10 + 9 + 4 = 43 (597)
여기서 597
각 항은 제곱되고 함께 더해집니다 (힌트 : 최적 솔루션의 값이 가장 높음) . 물론 다른 방법도 43
있지만, 아시다시피, 팩당 너겟이 많을수록 너겟 당 저렴합니다. 따라서 비용을 최소화하기 위해 가장 적은 수의 팩을 대량으로 구매하는 것이 이상적입니다.
작업
각 개인의 요구 사항에 해당하는 정수 목록을 취하는 프로그램 이나 함수 를 만들어야합니다 . 그런 다음 치킨 너겟을 구매하기 위해 가장 비용 효율적인 α 주문을 계산하고 인쇄 해야합니다 . 가장 비용 효율적인 α 차수는 각 수량의 제곱의 합이 가장 높은 조합입니다. 완벽하게 너겟을 살 수있는 방법이 전혀 존재하지 않는 경우, 당신은해야한다 인쇄 와 같은 falsy 값을 , , , 또는 언어로 볼 수 있습니다 뭐든간에.0
False
Impossible!
예제 I / O :
[2 7 12 4 15 3] => [20 10 9 4]
1, 1, 2, 1 => False
6 5 5 5 5 5 9 => 40
[6, 4, 9] => 9 10
1 => 0
199 => 40, 40, 40, 40, 20, 10, 9
2 => Impossible!
여기 에 처음 400에 대한 이상적인 솔루션의 목록이 있습니다. 이것들은 여러분이 기대하는 방식으로 형식화되지 않았으며 각각 tuple
은 형식 (N lots of M)
입니다.
규칙
- 표준 허점이 없습니다.
FrobeniusSolve
Mathematica 와 같이 작업의 전부 또는 대부분을 수행하는 내장 함수를 사용하지 마십시오 .
α-예를 들어 이것을 명확히하기 위해을 수행하여 43을 만들 수도 4 + 6 + 6 + 9 + 9 + 9 = 43 (319)
있지만, 제곱의 합이 소개에서 언급 한 조합보다 작으므로 최적이 아니므로 잘못된 출력입니다. 본질적으로, 더 높은 제곱합 = 더 낮은 비용 = 가장 비용 효율적인.