정원 울타리
시간 제한5초메모리 제한128 MB
경계 위 두 점을 잇는 직선으로 밭을 둘로 나눌 때, 잘라내야 하는 나무 가치 합의 최솟값을 구한다.
문제
게리는 나무로 가득한 직사각형 밭을 가꾸는 꼼꼼한 정원사입니다. 밭에는 두 종류의 나무, 소나무와 낙엽송이 자랍니다. 나무의 건강을 위해 그는 지금까지 쓰던 일반 비료 대신 각 종류에 맞는 전용 비료를 쓰기로 했습니다.
나무가 너무 많아 비료를 나무마다 따로 줄 수는 없습니다. 그래서 게리는 밭을 둘로 나누는 울타리를 세우고, 한쪽에는 소나무용 비료를, 다른 쪽에는 낙엽송용 비료를 뿌리려고 합니다. 울타리는 밭 경계 위의 서로 다른 두 점을 잇는 직선을 따라 세워집니다.
각 비료는 자기 종류의 나무에는 좋지만 다른 종류의 나무에는 치명적입니다. 울타리를 세우고 각 쪽의 비료를 정하고 나면, 소나무 쪽에 있는 낙엽송과 낙엽송 쪽에 있는 소나무는 모두 베어 내야 합니다. 또한 울타리를 세우기 전에, 울타리 직선 위에 정확히 놓인 나무는 종류와 상관없이 베어 내야 합니다.
각 나무는 종류, 나이 등에 따라 정해진 가치를 가집니다. 게리는 베어 내는 모든 나무의 가치 합, 즉 손실이 최소가 되도록 울타리의 위치와 각 쪽의 비료를 정하려고 합니다.
나무들이 주어질 때, 가능한 최소 손실을 구하세요.
입력
입력은 여러 개의 테스트 케이스로 이루어집니다.
각 테스트 케이스의 첫 줄에는 소나무의 수 와 낙엽송의 수 이 주어집니다 (). 이어지는 개의 줄은 각각 소나무 하나를, 그 다음 개의 줄은 각각 낙엽송 하나를 나타냅니다.
각 나무는 평면 위의 점으로, 세 정수 , , 로 주어집니다. 와 는 좌표 (), 는 가치입니다 (). 한 테스트 케이스 안에서 같은 위치에 있는 두 나무는 없습니다.
입력의 끝은 두 개의 0으로 이루어진 줄이며, 이 줄은 처리하지 않습니다.
출력
각 테스트 케이스마다 가능한 최소 손실을 나타내는 정수 하나를 한 줄에 출력하세요.