import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int a = in.nextInt();
// int b = in.nextInt();
int[][] data=new int[a][2];
for(int i=0;i<a;i++){
for(int j=0;j<2;j++){
data[i][j]=in.nextInt();
}
}
int res=subfunc(data);
System.out.println(res);
}
}
// 日志限流
public static int subfunc(int[][] data){
int len=data.length;
// int col=data[0].length;
int alltime=data[len-1][1];
int[][] dp=new int[len+1][alltime+1];// 在j的时间内,前i个任务可以完成几个
for(int i=0;i<=len;i++){
dp[i][0]=0;
}
for(int i=0;i<=alltime;i++){
dp[0][alltime]=0;
}
// System.out.println(alltime);
for(int i=1;i<=len;i++){
for(int j=1;j<=alltime;j++){
if(j-data[i-1][0]<0){
dp[i][j]=dp[i-1][j];
}
else{
// System.out.println(i);
// System.out.println(res);
dp[i][j]=Math.max(dp[i-1][j],dp[i-1][j-data[i-1][0]]+1);
// Math.max(dp[i-1][j],dp[i-1][j-data[j-1][0]]+1);
}
}
}
return dp[len][alltime];
}
}
压缩数组
public static int subfunc(int[][] data){
int len=data.length;
// int col=data[0].length;
int alltime=data[len-1][1];
int[] dp=new int[alltime+1];// 在j的时间内,前i个任务可以完成几个
dp[0]=0;
// System.out.println(alltime);
for(int i=1;i<=len;i++){
for(int j=alltime;j>=1;j--){
// for(int j=1;j<=alltime;j++){
if(j-data[i-1][0]<0){
dp[j]=dp[j];
}
else{
// System.out.println(i);
// System.out.println(res);
dp[j]=Math.max(dp[j],dp[j-data[i-1][0]]+1);
// dp[i][j]=Math.max(dp[i-1][j],dp[i-1][j-data[i-1][0]]+1);
// Math.max(dp[i-1][j],dp[i-1][j-data[j-1][0]]+1);
}
}
}
return dp[alltime];
}