網易2017 小易喜歡的數列

2021-08-06 05:51:16 字數 1273 閱讀 1774

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

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
輸出例子1:

3

思路:動態規劃,但要注意超時問題,因為k值可能很大。建立乙個dp[n][k+1],用以儲存計算過的資料,dp[i][j]表示第i位數字為j時,可能的數列情況,所以最後的返回值,應該是dp[n-1][1]+dp[n-1][2]+.....+dp[n-1][k]

會超時的方法:

public class wangyi0812_3 

for (int i = 1; i < n; i++)

for (int m = j; m > 0; m--)

dp[i][j] = (dp[i][j] + dp[i - 1][m]) % mod;}}

int result = 0;

for (int j = 1; j < k + 1; j++)

result = (result + dp[n - 1][j]) % mod;

system.out.println(result);

}

優化後:

public static void main(string args) 

for (int i = 1; i < n; i++)

dp[i][j] = (sum - invalid + mod) % mod;}}

int result = 0;

for (int j = 1; j < k + 1; j++)

result = (result + dp[n - 1][j]) % mod;

system.out.println(result);

}}

dp 小易喜歡的數列

小易非常喜歡擁有以下性質的數列 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範圍內,並且滿足第三條性質,所以小易是喜歡這...

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

小易非常喜歡擁有以下性質的數列 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範圍內,並且滿足第三條性質,所以小易是喜歡這...

網易2018校招筆試 小易喜歡的數列 C

小易非常喜歡擁有以下性質的數列 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範圍內,並且滿足第三條性質,所以小易是喜歡這...