[問題] ICPC 6015
看板Prob_Solve (計算數學 Problem Solving)作者lubrige (lubrige)時間11年前 (2013/03/16 18:16)推噓2(2推 0噓 2→)留言4則, 2人參與討論串1/2 (看更多)
題目: http://ppt.cc/Aogu
給予整數 N, R, Q,求一最大的正整數 M,使得
(1) 將 N 和 M 寫成十進位表示時,M 是 N 的 subsequence
(2) M 除 Q 會餘 R
其中 1 <= N < 10^1000, 0 <= R < Q <= 1000
目前的做法是
定義狀態 f[i][j],表示從 N 的最高位開始,考慮過前 i 個數字是否選進 M,且
餘 j 的情況時 M 的最大長度 (暫不考慮 value 大小),其中若為走不到的狀態則填 -1。
轉移為 (d(k) 為 k 從最高位下來第 k 個數字, zero base)
/ f[i - 1][j]
f[i][j] = max |
\ f[i - 1][j'] + 1, j = (10 * j' + d(i - 1)) % Q,
if f[i - 1][j'] != 0 or d(i - 1) != 0
boundary condition:
1. f[0][0] = 0
2. f[0][i] = -1, for 0 < i < Q
最大長度的表填完之後,再從 N 的最低位做回來,並且另外開一張表 g[i][j],
記到 f[i][j] 這格所形成的最長 subsequence,最高位數字是多少。
對於不是 -1 的格子,取下面裏比較大的數字 (這部份用 buttom up 來說):
1. g[i + 1][j], if f[i + 1][j] == f[i][j]
2. d(i), if f[i + 1][j'] == f[i][j] + 1, j' = (10 * j + d(i)) % Q
另外因為這部份倒過來做,所以為了避免抓到不是從 f[length(N)][R] 填回來的數字,
上面的計算還考慮是不是從 f[length(N)][R] 填回來的,如果不是的話一樣不考慮
g[i + 1][j] 或 d(i),這部份再記一張來解決。
不過答案不對,想請問一下有沒有什麼沒有考慮到地方,先謝謝大家 0w0/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.168.215.18
※ 編輯: lubrige 來自: 118.168.215.18 (03/16 18:18)
推
03/17 17:16, , 1F
03/17 17:16, 1F
→
03/17 17:17, , 2F
03/17 17:17, 2F
→
03/17 17:18, , 3F
03/17 17:18, 3F
推
03/23 17:32, , 4F
03/23 17:32, 4F
討論串 (同標題文章)
Prob_Solve 近期熱門文章
PTT數位生活區 即時熱門文章