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: Wrong Answer)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import static java.lang.Integer.parseInt;

/**
 * Sum of Integers II
 */
public class Main {

	static int[][][] memo;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String line;
		String[] words;

		while ((line = br.readLine()) != null && !line.isEmpty()) {

			int n, s;
			n = parseInt(line.substring(0, line.indexOf(' ')));
			s = parseInt(line.substring(line.indexOf(' ') + 1));
			if ((n | s) == 0) break;

			memo = new int[101][n + 1][s + 1];

			System.out.println(solve(0, n, s));

		} // end while
	} // end main

	static int solve(int p, int n, int s) {

		if (memo[p][n][s] != 0) {
			return memo[p][n][s];
		}

		if (n == 0 && s == 0) {
			return 1;
		} else if (p < 100 && s >= p && n > 0) {
			memo[p][n][s] = solve(p + 1, n - 1, s - p) + solve(p + 1, n, s);
			return memo[p][n][s];
		} else {
			return 0;
		}
	}
}