[問題] 路徑點數問題

看板C_and_CPP (C/C++)作者 (請給我前叉)時間16年前 (2009/06/08 05:14), 編輯推噓4(404)
留言8則, 6人參與, 最新討論串1/1
期末考的考題 一直想不通到底錯在哪邊 ┌─┬─┐ 一個表格如右,假設他可用座標來表達位置 │ 3│ 4│ 例如 1在(0,0)的點,2在(0,1) ├─┼─┤ │ 1│ 2│ n*n的正方形表格,表格內的數字為分數(score) └─┴─┘ 只能往右、上、右上走,有負數情況 題目問,走過哪一條路徑,可以使得經過的分數總和為最高,輸出最高分數極可 比如此表格 ↑→的分數是1+3+4=8 ↗ 的分數是 1+4 =5 →↑的分數是1+2+4=7 因此我們知道最大分數是8 我的做法是 當x為零(1 3這排),則各點總分可直接加算 (0,0)這點分數是1, (1,0)是1+3=4 當y為零(1 2這排),則各點總分可直接加算 (0,0) 1 (0,1) 1+2=3 當x>0&&y>0(4這排),各點總分 考慮該點左方、左下方、下方三點分數 將最大者與自身相加 (4比3、1大,所以挑左邊的4加上本身分數4=8) 請問這樣有什麼問題? 我覺得我只是把遞迴從(0,0)開始寫,然後用while跑遞迴 小測資答案是對的,大測資是錯的 我想知道為什麼會錯(詭論?) 感謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.227.195.24

06/08 06:20, , 1F
因為你用貪婪的算法處理,顧不到全局中最大值的路徑,
06/08 06:20, 1F

06/08 06:21, , 2F
你捨棄的區域小路徑仍有可能帶往全局的大路徑
06/08 06:21, 2F

06/08 08:10, , 3F
這是典型用 DP 解的問題
06/08 08:10, 3F

06/08 11:19, , 4F
更新的順序? 簡單解釋一下你的演算法吧 ?
06/08 11:19, 4F

06/08 11:20, , 5F
DP 即可, 不用去考慮什麼全局、區域的搜尋考量
06/08 11:20, 5F

06/08 12:23, , 6F
graph 自己建圖 最後跑最"長"路徑...
06/08 12:23, 6F

06/09 05:42, , 7F
可以舉個反例嗎@@ 如果方法是錯的至少有1反例吧
06/09 05:42, 7F

06/09 19:19, , 8F
那就是遞回寫錯拉
06/09 19:19, 8F
文章代碼(AID): #1AB2scoR (C_and_CPP)
文章代碼(AID): #1AB2scoR (C_and_CPP)