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