1.简述:
描述给定一个二维数组map,含义是一张地图,例如,如下矩阵
![#yyds干货盘点# 动态规划专题:龙与地下城游戏问题 #yyds干货盘点# 动态规划专题:龙与地下城游戏问题](data:image/svg+xml,%3Csvg%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20width%3D%22176.42700000000002px%22%20height%3D%2282.584px%22%20style%3D%22vertical-align%3A%20-4.005ex%3B%22%20viewBox%3D%220%20-2226.5%208440%203950.7%22%20role%3D%22img%22%20focusable%3D%22false%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20aria-labelledby%3D%22MathJax-SVG-1-Title%22%3E%0A%3Ctitle%20id%3D%22MathJax-SVG-1-Title%22%3E%5Cbegin%7BBmatrix%7D%20-2%26amp%3B-3%26amp%3B3%20%5C%5C%20-5%26amp%3B-10%26amp%3B1%5C%5C%200%26amp%3B30%26amp%3B-5%20%5Cend%7BBmatrix%7D%3C%2Ftitle%3E%0A%3Cdefs%20aria-hidden%3D%22true%22%3E%0A%3Cpath%20stroke-width%3D%221%22%20id%3D%22E1-MJMAIN-7B%22%20d%3D%22M434%20-231Q434%20-244%20428%20-250H410Q281%20-250%20230%20-184Q225%20-177%20222%20-172T217%20-161T213%20-148T211%20-133T210%20-111T209%20-84T209%20-47T209%200Q209%2021%20209%2053Q208%20142%20204%20153Q203%20154%20203%20155Q189%20191%20153%20211T82%20231Q71%20231%2068%20234T65%20250T68%20266T82%20269Q116%20269%20152%20289T203%20345Q208%20356%20208%20377T209%20529V579Q209%20634%20215%20656T244%20698Q270%20724%20324%20740Q361%20748%20377%20749Q379%20749%20390%20749T408%20750H428Q434%20744%20434%20732Q434%20719%20431%20716Q429%20713%20415%20713Q362%20710%20332%20689T296%20647Q291%20634%20291%20499V417Q291%20370%20288%20353T271%20314Q240%20271%20184%20255L170%20250L184%20245Q202%20239%20220%20230T262%20196T290%20137Q291%20131%20291%201Q291%20-134%20296%20-147Q306%20-174%20339%20-192T415%20-213Q429%20-213%20431%20-216Q434%20-219%20434%20-231Z%22%3E%3C%2Fpath%3E%0A%3Cpath%20stroke-width%3D%221%22%20id%3D%22E1-MJMAIN-2212%22%20d%3D%22M84%20237T84%20250T98%20270H679Q694%20262%20694%20250T679%20230H98Q84%20237%2084%20250Z%22%3E%3C%2Fpath%3E%0A%3Cpath%20stroke-width%3D%221%22%20id%3D%22E1-MJMAIN-32%22%20d%3D%22M109%20429Q82%20429%2066%20447T50%20491Q50%20562%20103%20614T235%20666Q326%20666%20387%20610T449%20465Q449%20422%20429%20383T381%20315T301%20241Q265%20210%20201%20149L142%2093L218%2092Q375%2092%20385%2097Q392%2099%20409%20186V189H449V186Q448%20183%20436%2095T421%203V0H50V19V31Q50%2038%2056%2046T86%2081Q115%20113%20136%20137Q145%20147%20170%20174T204%20211T233%20244T261%20278T284%20308T305%20340T320%20369T333%20401T340%20431T343%20464Q343%20527%20309%20573T212%20619Q179%20619%20154%20602T119%20569T109%20550Q109%20549%20114%20549Q132%20549%20151%20535T170%20489Q170%20464%20154%20447T109%20429Z%22%3E%3C%2Fpath%3E%0A%3Cpath%20stroke-width%3D%221%22%20id%3D%22E1-MJMAIN-33%22%20d%3D%22M127%20463Q100%20463%2085%20480T69%20524Q69%20579%20117%20622T233%20665Q268%20665%20277%20664Q351%20652%20390%20611T430%20522Q430%20470%20396%20421T302%20350L299%20348Q299%20347%20308%20345T337%20336T375%20315Q457%20262%20457%20175Q457%2096%20395%2037T238%20-22Q158%20-22%20100%2021T42%20130Q42%20158%2060%20175T105%20193Q133%20193%20151%20175T169%20130Q169%20119%20166%20110T159%2094T148%2082T136%2074T126%2070T118%2067L114%2066Q165%2021%20238%2021Q293%2021%20321%2074Q338%20107%20338%20175V195Q338%20290%20274%20322Q259%20328%20213%20329L171%20330L168%20332Q166%20335%20166%20348Q166%20366%20174%20366Q202%20366%20232%20371Q266%20376%20294%20413T322%20525V533Q322%20590%20287%20612Q265%20626%20240%20626Q208%20626%20181%20615T143%20592T132%20580H135Q138%20579%20143%20578T153%20573T165%20566T175%20555T183%20540T186%20520Q186%20498%20172%20481T127%20463Z%22%3E%3C%2Fpath%3E%0A%3Cpath%20stroke-width%3D%221%22%20id%3D%22E1-MJMAIN-35%22%20d%3D%22M164%20157Q164%20133%20148%20117T109%20101H102Q148%2022%20224%2022Q294%2022%20326%2082Q345%20115%20345%20210Q345%20313%20318%20349Q292%20382%20260%20382H254Q176%20382%20136%20314Q132%20307%20129%20306T114%20304Q97%20304%2095%20310Q93%20314%2093%20485V614Q93%20664%2098%20664Q100%20666%20102%20666Q103%20666%20123%20658T178%20642T253%20634Q324%20634%20389%20662Q397%20666%20402%20666Q410%20666%20410%20648V635Q328%20538%20205%20538Q174%20538%20149%20544L139%20546V374Q158%20388%20169%20396T205%20412T256%20420Q337%20420%20393%20355T449%20201Q449%20109%20385%2044T229%20-22Q148%20-22%2099%2032T50%20154Q50%20178%2061%20192T84%20210T107%20214Q132%20214%20148%20197T164%20157Z%22%3E%3C%2Fpath%3E%0A%3Cpath%20stroke-width%3D%221%22%20id%3D%22E1-MJMAIN-31%22%20d%3D%22M213%20578L200%20573Q186%20568%20160%20563T102%20556H83V602H102Q149%20604%20189%20617T245%20641T273%20663Q275%20666%20285%20666Q294%20666%20302%20660V361L303%2061Q310%2054%20315%2052T339%2048T401%2046H427V0H416Q395%203%20257%203Q121%203%20100%200H88V46H114Q136%2046%20152%2046T177%2047T193%2050T201%2052T207%2057T213%2061V578Z%22%3E%3C%2Fpath%3E%0A%3Cpath%20stroke-width%3D%221%22%20id%3D%22E1-MJMAIN-30%22%20d%3D%22M96%20585Q152%20666%20249%20666Q297%20666%20345%20640T423%20548Q460%20465%20460%20320Q460%20165%20417%2083Q397%2041%20362%2016T301%20-15T250%20-22Q224%20-22%20198%20-16T137%2016T82%2083Q39%20165%2039%20320Q39%20494%2096%20585ZM321%20597Q291%20629%20250%20629Q208%20629%20178%20597Q153%20571%20145%20525T137%20333Q137%20175%20145%20125T181%2046Q209%2016%20250%2016Q290%2016%20318%2046Q347%2076%20354%20130T362%20333Q362%20478%20354%20524T321%20597Z%22%3E%3C%2Fpath%3E%0A%3Cpath%20stroke-width%3D%221%22%20id%3D%22E1-MJMAIN-7D%22%20d%3D%22M65%20731Q65%20745%2068%20747T88%20750Q171%20750%20216%20725T279%20670Q288%20649%20289%20635T291%20501Q292%20362%20293%20357Q306%20312%20345%20291T417%20269Q428%20269%20431%20266T434%20250T431%20234T417%20231Q380%20231%20345%20210T298%20157Q293%20143%20292%20121T291%20-28V-79Q291%20-134%20285%20-156T256%20-198Q202%20-250%2089%20-250Q71%20-250%2068%20-247T65%20-230Q65%20-224%2065%20-223T66%20-218T69%20-214T77%20-213Q91%20-213%20108%20-210T146%20-200T183%20-177T207%20-139Q208%20-134%20209%203L210%20139Q223%20196%20280%20230Q315%20247%20330%20250Q305%20257%20280%20270Q225%20304%20212%20352L210%20362L209%20498Q208%20635%20207%20640Q195%20680%20154%20696T77%20713Q68%20713%2067%20716T65%20731Z%22%3E%3C%2Fpath%3E%0A%3Cpath%20stroke-width%3D%221%22%20id%3D%22E1-MJSZ4-23A7%22%20d%3D%22M712%20899L718%20893V876V865Q718%20854%20704%20846Q627%20793%20577%20710T510%20525Q510%20524%20509%20521Q505%20493%20504%20349Q504%20345%20504%20334Q504%20277%20504%20240Q504%20-2%20503%20-4Q502%20-8%20494%20-9T444%20-10Q392%20-10%20390%20-9Q387%20-8%20386%20-5Q384%205%20384%20230Q384%20262%20384%20312T383%20382Q383%20481%20392%20535T434%20656Q510%20806%20664%20892L677%20899H712Z%22%3E%3C%2Fpath%3E%0A%3Cpath%20stroke-width%3D%221%22%20id%3D%22E1-MJSZ4-23A9%22%20d%3D%22M718%20-893L712%20-899H677L666%20-893Q542%20-825%20468%20-714T385%20-476Q384%20-466%20384%20-282Q384%203%20385%205L389%209Q392%2010%20444%2010Q486%2010%20494%209T503%204Q504%202%20504%20-239V-310V-366Q504%20-470%20508%20-513T530%20-609Q546%20-657%20569%20-698T617%20-767T661%20-812T699%20-843T717%20-856T718%20-876V-893Z%22%3E%3C%2Fpath%3E%0A%3Cpath%20stroke-width%3D%221%22%20id%3D%22E1-MJSZ4-23A8%22%20d%3D%22M389%201159Q391%201160%20455%201160Q496%201160%20498%201159Q501%201158%20502%201155Q504%201145%20504%20924Q504%20691%20503%20682Q494%20549%20425%20439T243%20259L229%20250L243%20241Q349%20175%20421%2066T503%20-182Q504%20-191%20504%20-424Q504%20-600%20504%20-629T499%20-659H498Q496%20-660%20444%20-660T390%20-659Q387%20-658%20386%20-655Q384%20-645%20384%20-425V-282Q384%20-176%20377%20-116T342%2010Q325%2054%20301%2092T255%20155T214%20196T183%20222T171%20232Q170%20233%20170%20250T171%20268Q171%20269%20191%20284T240%20331T300%20407T354%20524T383%20679Q384%20691%20384%20925Q384%201152%20385%201155L389%201159Z%22%3E%3C%2Fpath%3E%0A%3Cpath%20stroke-width%3D%221%22%20id%3D%22E1-MJSZ4-23AA%22%20d%3D%22M384%20150V266Q384%20304%20389%20309Q391%20310%20455%20310Q496%20310%20498%20309Q502%20308%20503%20298Q504%20283%20504%20150Q504%2032%20504%2012T499%20-9H498Q496%20-10%20444%20-10T390%20-9Q386%20-8%20385%202Q384%2017%20384%20150Z%22%3E%3C%2Fpath%3E%0A%3Cpath%20stroke-width%3D%221%22%20id%3D%22E1-MJSZ4-23AB%22%20d%3D%22M170%20875Q170%20892%20172%20895T189%20899H194H211L222%20893Q345%20826%20420%20715T503%20476Q504%20467%20504%20230Q504%2051%20504%2021T499%20-9H498Q496%20-10%20444%20-10Q402%20-10%20394%20-9T385%20-4Q384%20-2%20384%20240V311V366Q384%20469%20380%20513T358%20609Q342%20657%20319%20698T271%20767T227%20812T189%20843T171%20856T170%20875Z%22%3E%3C%2Fpath%3E%0A%3Cpath%20stroke-width%3D%221%22%20id%3D%22E1-MJSZ4-23AD%22%20d%3D%22M384%20-239V-57Q384%204%20389%209Q391%2010%20455%2010Q496%2010%20498%209Q501%208%20502%205Q504%20-5%20504%20-230Q504%20-261%20504%20-311T505%20-381Q505%20-486%20492%20-551T435%20-691Q357%20-820%20222%20-893L211%20-899H195Q176%20-899%20173%20-896T170%20-874Q170%20-858%20171%20-855T184%20-846Q262%20-793%20312%20-709T378%20-525Q378%20-524%20379%20-522Q383%20-493%20384%20-351Q384%20-345%20384%20-334Q384%20-276%20384%20-239Z%22%3E%3C%2Fpath%3E%0A%3Cpath%20stroke-width%3D%221%22%20id%3D%22E1-MJSZ4-23AC%22%20d%3D%22M389%201159Q391%201160%20455%201160Q496%201160%20498%201159Q501%201158%20502%201155Q504%201145%20504%20925V782Q504%20676%20511%20616T546%20490Q563%20446%20587%20408T633%20345T674%20304T705%20278T717%20268Q718%20267%20718%20250T717%20232Q717%20231%20697%20216T648%20169T588%2093T534%20-24T505%20-179Q504%20-191%20504%20-425Q504%20-600%20504%20-629T499%20-659H498Q496%20-660%20444%20-660T390%20-659Q387%20-658%20386%20-655Q384%20-645%20384%20-424Q384%20-191%20385%20-182Q394%20-49%20463%2061T645%20241L659%20250L645%20259Q539%20325%20467%20434T385%20682Q384%20692%20384%20873Q384%201153%20385%201155L389%201159Z%22%3E%3C%2Fpath%3E%0A%3C%2Fdefs%3E%0A%3Cg%20stroke%3D%22currentColor%22%20fill%3D%22currentColor%22%20stroke-width%3D%220%22%20transform%3D%22matrix(1%200%200%20-1%200%200)%22%20aria-hidden%3D%22true%22%3E%0A%3Cg%20transform%3D%22translate(0%2C2150)%22%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJSZ4-23A7%22%20x%3D%220%22%20y%3D%22-900%22%3E%3C%2Fuse%3E%0A%3Cg%20transform%3D%22translate(0%2C-1032.9192546583852)%20scale(1%2C0.5527950310559007)%22%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJSZ4-23AA%22%3E%3C%2Fuse%3E%0A%3C%2Fg%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJSZ4-23A8%22%20x%3D%220%22%20y%3D%22-2150%22%3E%3C%2Fuse%3E%0A%3Cg%20transform%3D%22translate(0%2C-2932.919254658385)%20scale(1%2C0.5527950310559007)%22%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJSZ4-23AA%22%3E%3C%2Fuse%3E%0A%3C%2Fg%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJSZ4-23A9%22%20x%3D%220%22%20y%3D%22-2900%22%3E%3C%2Fuse%3E%0A%3C%2Fg%3E%0A%3Cg%20transform%3D%22translate(1056%2C0)%22%3E%0A%3Cg%20transform%3D%22translate(-11%2C0)%22%3E%0A%3Cg%20transform%3D%22translate(0%2C1350)%22%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMAIN-2212%22%20x%3D%220%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMAIN-32%22%20x%3D%22778%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%3C%2Fg%3E%0A%3Cg%20transform%3D%22translate(0%2C-50)%22%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMAIN-2212%22%20x%3D%220%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMAIN-35%22%20x%3D%22778%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%3C%2Fg%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMAIN-30%22%20x%3D%22389%22%20y%3D%22-1450%22%3E%3C%2Fuse%3E%0A%3C%2Fg%3E%0A%3Cg%20transform%3D%22translate(2268%2C0)%22%3E%0A%3Cg%20transform%3D%22translate(250%2C1350)%22%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMAIN-2212%22%20x%3D%220%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMAIN-33%22%20x%3D%22778%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%3C%2Fg%3E%0A%3Cg%20transform%3D%22translate(0%2C-50)%22%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMAIN-2212%22%20x%3D%220%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%3Cg%20transform%3D%22translate(778%2C0)%22%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMAIN-31%22%3E%3C%2Fuse%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMAIN-30%22%20x%3D%22500%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%3C%2Fg%3E%0A%3C%2Fg%3E%0A%3Cg%20transform%3D%22translate(389%2C-1450)%22%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMAIN-33%22%3E%3C%2Fuse%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMAIN-30%22%20x%3D%22500%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%3C%2Fg%3E%0A%3C%2Fg%3E%0A%3Cg%20transform%3D%22translate(5048%2C0)%22%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMAIN-33%22%20x%3D%22389%22%20y%3D%221350%22%3E%3C%2Fuse%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMAIN-31%22%20x%3D%22389%22%20y%3D%22-50%22%3E%3C%2Fuse%3E%0A%3Cg%20transform%3D%22translate(0%2C-1450)%22%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMAIN-2212%22%20x%3D%220%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMAIN-35%22%20x%3D%22778%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%3C%2Fg%3E%0A%3C%2Fg%3E%0A%3C%2Fg%3E%0A%3Cg%20transform%3D%22translate(7550%2C2150)%22%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJSZ4-23AB%22%20x%3D%220%22%20y%3D%22-900%22%3E%3C%2Fuse%3E%0A%3Cg%20transform%3D%22translate(0%2C-1032.9192546583852)%20scale(1%2C0.5527950310559007)%22%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJSZ4-23AA%22%3E%3C%2Fuse%3E%0A%3C%2Fg%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJSZ4-23AC%22%20x%3D%220%22%20y%3D%22-2150%22%3E%3C%2Fuse%3E%0A%3Cg%20transform%3D%22translate(0%2C-2932.919254658385)%20scale(1%2C0.5527950310559007)%22%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJSZ4-23AA%22%3E%3C%2Fuse%3E%0A%3C%2Fg%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJSZ4-23AD%22%20x%3D%220%22%20y%3D%22-2900%22%3E%3C%2Fuse%3E%0A%3C%2Fg%3E%0A%3C%2Fg%3E%0A%3C%2Fsvg%3E)
游戏的规则如下:1)骑士从左上角出发,每次只能向右或向下走,最后到达右下角见到公主。2)地图中每个位置的值代表骑士要遭遇的事情。如果是负数,说明此处有怪兽,要让骑士损失血量。如果是非负数,代表此处有血瓶,能让骑士回血。3)骑士从左上角到右下角的过程中,走到任何一个位置时,血量都不能少于1。为了保证骑土能见到公主,初始血量至少是多少?
根据map,输出初始血量。
输入描述:第一行两个正整数n,m
,接下来n行,每行m个整数,代表
。
输出描述:输出一个整数,表示答案。
示例1输入:
3 3
-2 -3 3
-5 -10 1
0 30 -5
输出:
示例2输入:
输出:
2.代码实现:
import java.util.*;
public class Main{
public static void main(String []args){
Scanner input=new Scanner(System.in);
int n=input.nextInt();
int m=input.nextInt();
int [][]map=new int[n][m];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
map[i][j]=input.nextInt();
}
}
int [][]dp=new int[n][m];
// 用hpMatrix表示骑士从任意一格到达终点所需要的最少血量
dp[n-1][m-1]=(map[n-1][m-1]>0?1:-map[n-1][m-1]+1);
for(int j=m-2;j>=0;j--){
if(map[n-1][j]-dp[n-1][j+1]>=0){
dp[n-1][j]=1;
}
else{
dp[n-1][j]=dp[n-1][j+1]-map[n-1][j];
}
}
for(int i=n-2;i>=0;i--){
if(map[i][m-1]-dp[i+1][m-1]>=0){
dp[i][m-1]=1;
}
else{
dp[i][m-1]=dp[i+1][m-1]-map[i][m-1];
}
}
for(int i=n-2;i>=0;i--){
for(int j=m-2;j>=0;j--){
int minNeed=Math.min(dp[i+1][j],dp[i][j+1]); //两个方向最少需要的血
if(map[i][j]-minNeed>=0){ //同样的思路,如果够用,那就只需要1点血进来,因为最少一点血
dp[i][j]=1;
}
else{
dp[i][j]=minNeed-map[i][j]; //如果不够用的话,就只能增加进来时候的血
}
}
}
System.out.println(dp[0][0]);
}
}