[問題] 高中生解題系統B568一問

作者: Ori185 (Ori185)   2018-09-10 23:54:33
開發平台(Platform): (Ex: Win10, Linux, ...)
WIN10
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
g++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
https://zerojudge.tw/ShowProblem?problemid=b568
小弟我目前剛學到動態規劃演算法
看到這題似乎可以應用到便試了試
結果從第三個測資開始似乎因為超過限制的64MB而終止
認為應該有比起創立一個超級大的二維陣列以外(70萬…)
更加節省空間聰明的辦法
請問可以指點解一下嗎?
非常謝謝
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
https://glot.io/snippets/f4odl8o9kh/raw
補充說明(Supplement):
記憶體限制64MB
作者: idiont (supertroller)   2018-09-11 01:52:00
把n*700000變成2*700000
作者: dou0228 (7777)   2018-09-11 10:44:00
作者: idiont (supertroller)   2018-09-11 12:29:00
樓上這個不會過吧
作者: uorol (′‧ω‧‵)   2018-09-11 13:09:00
題目不是最大只有100題嗎
作者: cateran (雲川閒步)   2018-09-11 16:25:00
用hash table?
作者: dou0228 (7777)   2018-09-11 17:12:00
不是才 100 題?
作者: Ori185 (Ori185)   2018-09-11 20:06:00
不太懂各位的意思,如果最多100題,最大不就會創建100*70W的陣列嗎?https://glot.io/snippets/f4pbyyxurv/raw參照一樓的建議,已經不會有記憶體的問題了,可是4與5測稚還是差一點數字,請問哪裡有問題呢
作者: sarafciel (Cattuz)   2018-09-12 11:14:00
你有考慮溢位後才會跳最大值的情況嗎699999 3 699998 像這種測資超界就不算的會得到699999但按題意他的最大值應該是699999+3+699998=700000
作者: alan23273850   2018-09-12 13:46:00
剛剛想了一下,如果針對每個數字多加一個負補數進去例如 699999 就加個 -1,3 就加個 -699997,這樣會形成一個 2 倍長度的陣列,如果題目轉成總和不超過700000 的條件下要找到最大和,這樣是否就形成另類的背包問題呢?值得注意的是因為原本的題目本來就都是正整數,因此遇到 0 可以直接當成 700000好像也不能當成背包問題,不過至少全部總共有 3^n個... 好像也不太對 算惹
作者: Ori185 (Ori185)   2018-09-13 23:44:00
感謝各位回答,回文的c大的程式碼已經AC過了,希望我趕快弄懂就是了…

Links booklink

Contact Us: admin [ a t ] ucptt.com