AOJ 0070 - Combination of Number Sequences

a[1<<10]じゃRuntime Errorでした.a[1<<11]だとできました.
1<<10(=2^10)でもいいと思うのですが,よくわかりません.
容量は少し余分にとっておくべきですね.(MLEしたら残念)

#include<iostream>

int n, s;
int a[1<<11][340];

//S: つかったもの
//v: さっきつかったもの
//rn: 入れた数
//sum: 残る和
int rec(int S, int rn, int sum){
	if(sum >= 0 && a[S][sum] != -1){
		return a[S][sum];
	}

	if(sum == 0 && rn == n){
		return 1;
	}

	if(rn == n){//うまく入らなかった
		return 0;
	}

	if(sum < 0){
		return 0;
	}

	int res = 0;
	for(int i=0;i<10;i++){
		if(!(S >> i & 1) && sum-(rn+1)*i >= 0){//使っていない
			res += rec(S | (1 << i), rn+1, sum-(rn+1)*i);
		}
	}
	return a[S][sum] = res;
}

int main(){
	int res;
	while(std::cin >> n >> s, !std::cin.eof()){
		res = 0;
		for(int i=0;i<(1<<11);i++){
			for(int j=0;j<340;j++){
				a[i][j] = -1;
			}
		}
		for(int i=0;i<10;i++){
			res += rec(1 << i, 1, s-i);
		}

		std::cout << res << std::endl;
	}
	return 0;
}