中石油训练赛 - 关于我转生变成史莱姆这档事(dfs)
題目描述
關于我轉生變成史萊姆這檔事這部番劇中,上班族的三上悟因為某個事件而作為史萊姆在異世界轉生了。在轉生時得到了“大賢者”和“捕食者”這兩個獨特技能。雖然身為史萊姆,但也想和其他種族建立起友好關系。魔素是異世界里面魔物含有的魔力精華,捕食者這個技能就是吞噬魔素,捕食者的技能要求非??量?#xff0c;如果你第一天吞噬了b魔素,那么你第二天可以吞噬第一天的2~9倍(必須是其中一個整數),也就是2b~9b,也就是說,史萊姆在第i天所吞噬的魔素一定是第i-1天的2~9倍,而且還必須是它的整數倍。
作為史萊姆手下的得力助手,哥布林們準備了大量的魔物供主人食用,現在史萊姆已經知道了這些魔物含有S魔素,現在請大賢者合理安排第一天要吞噬和接下來每天需要增加的魔素倍數,好讓史萊姆能在最短的天數內恰好吞噬完魔素。由于大賢者要研究“哲學”,無暇顧及這些小事,現在只能請你幫忙,但是大賢者還建議,這些魔素至少要用兩天來吞噬。
?
輸入
一個正整數S,代表要吞噬的魔素總量。
輸出
一個數,代表要吞噬的天數,如果無解輸出-1。
樣例輸入 Copy
571樣例輸出 Copy
5提示
對于30%數據,有S<=100;
對于70%數據,有S<=107;
對于100%數據,有9<S<=8×108
題目分析:很玄學的一個題,因為數據范圍比較大所以一直不敢切,感覺dfs爆搜會超時,看來還是高估出題人給的數據了
首先因為每一天吞噬的魔素必須是前一天的2~9倍,那么我們設 p ∈[ 2 , 9 ] ,第一天吞噬的魔素為 a ,那么往后吞噬的總魔素的數量為:a + a*p1 + a*p1*p2 ... + a*p1*p2*...*pk ,合并同類項之后,就變成了 a * ( 1 + p1 * ( 1 + p2 * ( 1 + ...( 1 + pk ) ) ) ) ,這樣也就變成了一個中規(guī)中矩的遞歸的表達式了,對于每次最外面的 a 來說,因為?a * ( 1 + p1 * ( 1 + p2 * ( 1 + ...( 1 + pk ) ) ) ) = sum ,所以 a 一定是題目給出的 s 的一個因子,確定好第一層的因子后,直接dfs搜索就好了,記得一些特定細節(jié)的判斷就好了,本來以為直接爆搜時間復雜度會高達8^20,肯定會TLE,結果連剪枝都沒有,交上去20ms就跑完了,加了個最優(yōu)性剪枝10ms就跑完了
代碼:
?
?
總結
以上是生活随笔為你收集整理的中石油训练赛 - 关于我转生变成史莱姆这档事(dfs)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中石油训练赛 - sciorz画画(区间
- 下一篇: HDU - 1754 I Hate It