만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

단단한 배낭 문제

시간 제한1초메모리 제한512 MB

요약
무게와 비용이 있는 n개의 물건과 용량 W가 주어질 때, 총 무게가 1.5W를 넘지 않으면서 용량 W의 최적 비용 이상인 물건 집합을 찾습니다.
난이도

보통10점 중 7점

유형
동적 계획법, 그리디, 정렬
정답자
아직 제출이 없습니다

문제

배낭 문제는 컴퓨터 과학의 고전적인 문제이다.

문제는 다음과 같이 주어진다. nn개의 물건이 있고, 각 물건마다 무게 w_iw\_i와 비용 cost_icost\_i를 알고 있다. 배낭의 용량 WW도 알고 있으며, 이는 담을 수 있는 물건들의 총무게 상한이다. 목표는 총무게가 WW 이하가 되도록 물건을 여러 개 골라 총비용을 최대한 크게 만드는 것이다.

이 문제에서는 고전적인 배낭 문제를 풀 필요가 없다. 심판은 이미 문제를 풀어 정확한 답을 구했다. xx는 용량 WW인 배낭에 들어갈 수 있는 물건들의 총비용 최댓값이다. 심판은 이 값을 알려 주지 않는다.

여러분의 과제는 단단한 배낭 문제를 푸는 것이다. 이 배낭은 용량이 WW라고 주장하지만, 무게 32W\frac{3}{2}W까지의 물건을 담을 수 있다. 이 완화된 제약에서 얻은 해가 심판이 원래 제약 WW로 얻은 해보다 나쁘지 않아야 한다.

다시 말해, 총비용이 xx 이상이고 총무게가 32W\frac{3}{2}W 이하인 물건의 집합을 찾아야 한다.

입력

입력 데이터에는 하나 또는 여러 개의 테스트 케이스가 들어 있다.

첫 줄에는 테스트 케이스의 개수가 주어진다. 이후 테스트 케이스가 다음 형식으로 이어진다.

각 테스트 케이스의 첫 줄에는 두 정수 nn과 WW (1≤n≤1051 \le n \le 10^5; 1≤W≤10121 \le W \le 10^{12})가 주어진다. 각각 물건의 개수와 배낭의 주장된 용량이다.

다음 nn개의 줄은 물건을 나타낸다. 각 줄에는 두 정수 w_iw\_i와 cost_icost\_i (1≤w_i,cost_i≤1061 \le w\_i, cost\_i \le 10^6)가 주어지며, 각각 물건의 무게와 비용이다.

모든 테스트 케이스의 nn을 합하면 10510^5 이하이다.

출력

각 테스트 케이스마다 무게 제한 32W\frac{3}{2}W에 맞는 선택한 물건들의 집합을 다음 형식으로 출력한다.

첫 줄에는 선택한 물건의 개수를 출력한다.

둘째 줄에는 선택한 물건의 번호 i_1 i_2 … i_ki\_1\ i\_2\ \dots \ i\_k (1≤i_j≤n1 \le i\_j \le n)를 출력한다. 모든 i_ji\_j는 서로 달라야 한다. 물건의 번호는 입력에 주어진 순서대로 1부터 nn까지이다.

해가 여러 개라면 그중 아무거나 하나를 출력하면 된다.

예제1

  1. 예제 1

    입력
    3
    3 10
    5 100
    5 100
    4 99
    3 100
    97 100
    98 101
    99 90
    3 100
    55 100
    99 150
    200 200
    
    예상 출력
    3
    3 1 2 
    1
    2
    1
    2