Problem:
整数の和 II

0 から 100 の数字から異なる n 個の数を取り出して合計が s となる組み合わせの数を出力するプログラムを作成してください。n 個の数はおのおの 0 から 100 までとし、１つの組み合わせに同じ数字は使えません。たとえば、n が 3 で s が6 のとき、3 個の数字の合計が 6 になる組み合わせは、

1 + 2 + 3 = 6
0 + 1 + 5 = 6
0 + 2 + 4 = 6

の 3 通りとなります。

Input

複数のデータセットが与えられます。各データセットに n ( 1 ≤ n ≤ 9 ) と s ( 0 ≤ s ≤ 1000 ) が１つのスペースで区切られて１行に与えられます。n と s が共に 0 のとき入力の最後とします。

データセットの数は 50 を超えません。

Output

各データセットに対して、n 個の整数の和が s になる組み合わせの数を１行に出力して下さい。

組み合わせの数が 1010を超える入力は与えられません。

Sample Input

3 6
3 1
0 0

Output for the Sample Input

3
0

Solution in JAVA (judge verdict: Time Limit Exceeded)



import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;



 class Main{
     
    static int count=0;
    
     public static void main(String args[]){
         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
         try{
             String line;
             while((line=br.readLine())!=null){if(line.isEmpty())break;
                 count=0;
                 String[] split = line.split(" ");
                 int n=Integer.parseInt(split[0]);int s=Integer.parseInt(split[1]);
                 func(n,s,0,0,-1);
                 System.out.println(count);
             }
         }catch(Exception e){}
         
     }
     
     static void func(int n, int s, int sum,int nowN,int prev){
         if(nowN==n){if(sum==s)count++;return;}
         if(sum>s)return;
         for(int i=prev+1;i<=100-(n-nowN)+1;i++ ){
             func(n,s,sum+i,nowN+1,i);
         }
     }
 }