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 C++ (judge verdict: Accepted)

#include <bits/stdc++.h>

using namespace std;

int n,s;
long long int a[10][1001][101];

long long int solver(int d,int sum,int p){
	if(a[d][sum][p] >= 0)return a[d][sum][p];

	if(d == n){
		if(sum == s){
			return a[d][sum][p] = 1;
		}else{
			return a[d][sum][p] = 0;
		}
	}

	long long int b = 0;
	for(int i = p;i <= 100;i++){
		b += solver(d+1,sum+i,i+1);
	}
	a[d][sum][p] = b;
	return b;
}
int main(){
	while(cin >>n >>s,n){
		fill_n(**a,10*1001*101,-1);
		cout << solver(0,0,0) << endl;
	}
	return 0;
}