公告歡迎來到 Larry's notes,近期會持續整理網站。
※ LeetCode, UVa 與 YZUCSE 系列相關文章已從首頁的文章列表中移除。可從首頁的釘選分類瀏覽。
※ LeetCode, UVa 與 YZUCSE 系列相關文章已從首頁的文章列表中移除。可從首頁的釘選分類瀏覽。
UVa - 10616 解題紀錄
題目: UVa - 10616 - Divisible Group Sums
題目說明
給一些整數及一些 D、M,求在這些整數中,找 M 個相加可以被 D 整除的情況數。
Input: 每組測資前兩個整數依序為 N、Q,表有 N 個數字,及 Q 組 D、M,後面 N 行為 N 個整數,再後面 Q 行每行有兩個整數,依序代表 D、M。
Output: 輸出在這些整數中,找 M 個相加可以被 D 整除的情況數。
解題思路
為了方便計算,先對所有數字進行處理,使得數字都落在 0 ~ D - 1 裡面,若是正數只要直接 % D 即可,負數需要特別處理,由於負數 % D 後範圍會落在 0 ~ - ( D - 1 ),根據同餘定理,加上 D 後取餘的結果相同,因此加上 D,使得所有數字都在範圍內。
定義 dp[k][j],表挑 j 個數字相加等於 k 的情況數。
之後遍歷處理好的陣列,核心想法為考慮目前遍歷的數字是否要加入,以此想法做 DP 即可。
由於 DP 縮減了一維,所以計算時要從後面往前算。
最後再將能被 D 整除的所有情況數相加即可。
參考解法
1 |
|
參考資料
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Larry's notes!
評論