題目:一個陣列的長度為n,陣列的每個數的范圍在L和R之間,而且陣列中所有元素的和為k的倍數,求滿足要求的陣列個數有多少個?最后結果只需要回傳模1e9+7即可
比如n=9, L=1, R=3, k=1的話,這個陣列共有19683種,
本人不成熟的想法:
和的范圍是[n*L, n*R],對于其中的某個數i滿足上述要求,那么i%k=0,和為i的陣列個數共有dp[i]個,那么下一個滿足要求的和就是i+k,
因此dp[i+k] = dp[i]*handle(k, n), handle函式是,k個球放到n個盒子里,每個盒子最少0個,最多放R減去盒子原先就有的個數,但是排列組合的知識早就還給體育老師了,不知道有沒有大佬能提供下思路,或者有其他更好的辦法能解決這個問題!!!
謝謝
uj5u.com熱心網友回復:
不懂啊,如果可以是小數,不是無數個嗎?uj5u.com熱心網友回復:
忘記說取值范圍了:1<=n<=1e5, 1<=k<=10, 1<=L<=R<=1e9uj5u.com熱心網友回復:
我也不會這個 昨天就做出來第一個了。。。這個我的思路是
當k=1時 R-L+1=3 所以list的9個數都只能在【1,2,3】 里面挑
最小值為1*9=9 這時9%1=0 是滿足k的倍數的
最大值為9*3=27 27%1=0也滿足
所以一共就是3**9=19683種方法 (9個位置 每個位置可以選三個數)
但是當k>1時的邊界情況我當時沒想
需要考慮:(n*L)%k != 0 (n*R)%k != 0 當邊界不滿足時 要移動幾個位置后再除k
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/114589.html
標籤:C++ 語言
上一篇:求助:VS2015 報錯無法找到或打開pdb檔案,試過從官網下載沒有用
下一篇:使用DuiLib出現的鏈接錯誤
