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)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder();

            long[,] dp = new long[11, 1001];
            dp[0, 0] = 1;

            for (int k = 0; k <= 100; k++)
            {
                for (int i = 10; i > 0; i--)
                {
                    for (int j = k; j <= 1000; j++)
                    {
                        dp[i, j] += dp[i - 1, j - k];
                    }
                }
            }

            while (true)
            {
                string[] input = Console.ReadLine().Split(' ');
                int n = int.Parse(input[0]);
                int s = int.Parse(input[1]);

                if (n == 0 && s == 0) break;

                sb.AppendLine(dp[n, s].ToString());
            }
            Console.Write(sb);
        }
    }
}