2018網易校招內推 小易喜歡的數列

2021-08-07 14:01:41 字數 1377 閱讀 5829

小易非常喜歡擁有以下性質的數列:

1、數列的長度為n

2、數列中的每個數都在1到k之間(包括1和k)

3、對於位置相鄰的兩個數a和b(a在b前),都滿足(a <= b)或(a mod b != 0)(滿足其一即可)

例如,當n = 4, k = 7

那麼,它的長度是4,所有數字也在1到7範圍內,並且滿足第三條性質,所以小易是喜歡這個數列的

但是小易不喜歡這個數列。小易給出n和k,希望你能幫他求出有多少個是他會喜歡的數列。

輸入描述:

輸入包括兩個整數n和k(1 ≤ n ≤ 10, 1 ≤ k ≤ 10^5)
輸出描述:

輸出乙個整數,即滿足要求的數列個數,因為答案可能很大,輸出對1,000,000,007取模的結果。
示例1

輸入

2 2
輸出

3
設定乙個二維狀態陣列state,這個狀態陣列第一維為數列的每個數的情況,例如state=[[0, 1, 1, 1, 1], [0, 4, 3, 3, 2], [0, 12, 8, 8, 5]],表示state[0]、state[1]、state[2] 第乙個數、第二個數、第三個數的狀態情況。如前面的數取1,後面可以是(1,2,3,4),如果取2,後面可以是(2,3,4),如果取3,後面可以是(2,3,4)如果取4,(3,4),這樣即為我們上述的state的第二個子串行的狀態情況,[4,3,3,2],下面的做法原理一樣。

實現**如下:

def

func

(): nums = [int(item) for item in raw_input().split()]

n,k1 = nums[0],nums[1]

state = [[0

for i in range(k1+1)] for j in range(n)]

for j in range(n):

for i in range(1,k1+1):

if j == 0:

state[j][i] = 1

else:

## i為頭,看k後面可以跟多少個數

for k in range(1,k1+1):

if k >= i or i%k!=0:

state[j][i] += state[j-1][k]

state[j][i] %= 1000000007

return sum(state[n-1])%1000000007

if __name__ == '__main__':

state=func()

print state

2018網易校招內推 瘋狂佇列

小易老師是非常嚴厲的,它會要求所有學生在進入教室前都排成一列,並且他要求學生按照身高不遞減的順序排列。有一次,n個學生在列隊的時候,小易老師正好去衛生間了。學生們終於有機會反擊了,於是學生們決定來一次瘋狂的佇列,他們定義乙個佇列的瘋狂值為每對相鄰排列學生身高差的絕對值總和。由於按照身高順序排列的佇列...

2018網易校招內推程式設計題 堆棋子

小易將n個棋子擺放在一張無限大的棋盤上。第i個棋子放在第x i 行y i 列。同乙個格仔允許放置多個棋子。每一次操作小易可以把乙個棋子拿起並將其移動到原格仔的上 下 左 右的任意乙個格仔中。小易想知道要讓棋盤上出現有乙個格仔中至少有i 1 i n 個棋子所需要的最少操作次數.輸入描述 輸入包括三行,...

2018網易校招題

1 為了得到乙個數的 相反數 我們將這個數的數字順序顛倒然後再加上原先的數得到 相反數 例如,為了得到1324的 相反數 首先我們將該數的數字順序顛倒。我們得到5231,之後再加上原先的數,我們得到5231 1325 6556,如果顛倒之後的數字有字首 字首零將會被忽略。例如n 100。顛倒之後是1...