저도 PACKING 문제 질문 드립니다 ㅠ(python)

  • rlakim5521
    rlakim5521

    아랫분처럼 저도 예시나 제가 직접 만든 테스트 케이스는 잘 통과를 하는데 계속 오답이라고 결과가 납니다. 종만북 해답과는 다른 방식으로 풀긴 했지만 근본적으로는 메모이제이션을 사용하여 풀었습니다.
    혹시 관리자분 계시면 정답과 제 코드의 출력이 어떻게 다른지 좀 알려주실 수 있으십니까? ㅠㅠ

    # PACKING
    # Jaekyoung Kim (rlakim5521@naver.com)
    
    # Gets a max capacity of received capacity and returns the optimal table
    def getMaxCapacity(maxCapacity, optimalTable, itemVolume, itemUrgency, numberOfItem):
    
        for capacity in xrange(1, maxCapacity + 1):
            # Default case is adding nothing.
            for item in xrange(numberOfItem + 1):
                optimalTable[item][capacity] = optimalTable[item][capacity - 1]
    
            # Compares urgencies of all possible cases.
            for item in xrange(1, numberOfItem + 1):
                if(capacity - itemVolume[item] >= 0):
                    if(optimalTable[item][capacity - itemVolume[item]] == 0):
                        if(optimalTable[0][capacity] < optimalTable[0][capacity - itemVolume[item]] + itemUrgency[item]):
                            optimalTable[0][capacity] = optimalTable[0][capacity - itemVolume[item]] + itemUrgency[item]
                            for item2 in xrange(1, numberOfItem + 1):
                                optimalTable[item2][capacity] = optimalTable[item2][capacity - itemVolume[item]]
                            optimalTable[item][capacity] = 1
    
        return optimalTable
    
    
    # Main function
    def MainFunction():
        if __name__ == "__main__":
            for _ in xrange(input()):
                numberOfItem, maxCapacity = map(int, raw_input().split())
    
                # First row is a row for the maximum urgency and
                # the others are used to show whether the item is packed or not.
                optimalTable = [[0] * (maxCapacity + 1) for _ in range(numberOfItem + 1)]
                itemName = {}
                itemVolume = {}
                itemUrgency = {}
    
                # Inserts input data into dictionaries
                for item in xrange(1, numberOfItem + 1):
                    itemName[item], tempVolume, tempUrgency = raw_input().split()
                    itemVolume[item] = int(tempVolume)
                    itemUrgency[item] = int(tempUrgency)
    
                optimalTable = getMaxCapacity(maxCapacity, optimalTable, itemVolume, itemUrgency, numberOfItem)
    
                # Adds used items into list
                portableItems = []
                for item in xrange(1, numberOfItem + 1):
                    if(optimalTable[item][maxCapacity]):
                        portableItems.append(itemName[item])
    
                # Output
                print optimalTable[0][maxCapacity], len(portableItems)
                for item in range(len(portableItems)):
                    print portableItems[item]
    
    MainFunction()
    

    8년 전
3개의 댓글이 있습니다.
  • rlakim5521
    rlakim5521

    종만북에서 나온 알고리즘 기준으로 풀었을 때는 정답이 나오는 것으로 봐서 입출력 문제는 아닌 것 같습니다.


    8년 전 link
  • rlakim5521
    rlakim5521

    해커랭크에서는 위 알고리즘으로 같은 문제를 통과했습니다.


    8년 전 link
  • Being
    Being

    최대 절박도를 찾지 못한 경우가 있습니다.


    8년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.