2014-10-12 54 views

回答

3

在這種情況下,<<是左移位運算符。 1 << 18表示採用1的二進制表示並將其左移18位。這是2 (2表示電源18或262144)。所以,你必須對一個非常大的二維數組:

pair <int, int> approach[262144][17]; 
2

<<是位左移運算符。

所以1 << 18是一個整數常量值爲2 。

1

它只是意味着2^18,2至18

代碼缺少一些解釋的權力,只有真正的好信息是

// SGU 502 -- Digits Permutation 

阿其對數字的排列,所以

pair <int, int> approach[1 << 18][17] 

可能被用來存儲排列,除非排列上有一些限制,排列的數量應該是N! (希望是N! < =(1 < <18))。

但是這個定義並沒有說明任何有關的信息,讓我們看看我們是否可以使它更清楚(希望是正確的)。

const int maxLength = 17; 
const int maxPermutation = 1 << (maxLength+1); 
pair <int, int> approach[maxPermutation ][maxLength] 
static_assert(factorial(maxLength) <= maxPermutation, "approach might not be able to hold all permutations");