ohmy.codes

IP 121.168.0.0 Created 05-22 13:17
1
import java.io.*;
2
import java.util.*;
3
class Main{
4
public static void main(String[] args)throws Exception{
5
System.setIn(new FileInputStream("input.txt"));
6
BufferedReader I=new BufferedReader(new InputStreamReader(System.in));
7
StringBuilder as=new StringBuilder();
8
9
int ti=Integer.parseInt(I.readLine());
10
for(int t=1;t<=ti;t++){
11
StringTokenizer st=new StringTokenizer(I.readLine());
12
int n=Integer.parseInt(st.nextToken()),l=Integer.parseInt(st.nextToken());
13
14
int[][] food=new int[n][2];
15
int[] dp=new int[l+1];
16
TreeSet<Integer> tree=new TreeSet<>();
17
18
for(int i=0;i<n;i++){
19
st=new StringTokenizer(I.readLine());
20
food[i][1]=Integer.parseInt(st.nextToken());
21
food[i][0]=Integer.parseInt(st.nextToken());
22
}
23
24
Arrays.sort(food,Comparator.comparingInt(a->a[0]));
25
26
for(int i=0;i<n;i++){
27
int kal=food[i][0];
28
//System.out.println(dp[kal]+" "+food[i][1]);
29
dp[kal]=Math.max(dp[kal],food[i][1]);
30
ArrayList<Integer>save=new ArrayList<>();
31
for(int j:tree){
32
if(j+kal>l) break;
33
dp[j+kal]=Math.max(dp[j+kal],dp[j]+dp[kal]);
34
save.add(j+kal);
35
}
36
for(int j:save){
37
tree.add(j);
38
}
39
tree.add(kal);
40
}
41
42
int max=0;
43
for(int i:tree){
44
System.out.println("kal: "+i+" taste: "+dp[i]);
45
if(max<dp[i]) max=dp[i];
46
}
47
String ass=String.format("#%d %d\n",t,max);
48
as.append(ass);
49
}
50
System.out.println(as);
51
}
52
}