日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

完美世界2017/9/26笔试题

發布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 完美世界2017/9/26笔试题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

黃金圣斗士歐洛斯要去圣域救雅典娜,需要從左上角出發,每次只能向右或向下走,最后到右下角見到雅典娜。地圖中每個位置代表圣斗士遭遇的事情,如果是負數,說明此處有狙擊,要讓盛都歐式損失血量,如果是非負數,說明此處有血瓶,能讓圣斗士回血,圣斗士從左上角到右下角的過程中,走到任何一個位置是,血量都不能少于1,為了保證圣斗士能救出雅典娜,初始血量至少為多少?地圖為一個二維數組map,如下矩陣,根據map返回初始血量。

-2? ?-3? ?3

-5? ?-10? 1

0? ?30? ?-5

返回7


思路是這樣的:

從左上角到右下角有n條路徑,求每條路徑上最大耗血量,這n個耗血量中的最小耗血量+1即為初始血量。

因為每一步都要求血量最少為1,設初始血量為-1,從map[0][0]到map[n][m]做加法,記錄這個累加過程中的最小值(一定是負數,且最大為-1)。

到達map[n][m]的時候比較這條路徑的累加最小值min和以前的最大的累加最小值max,二者取大值存入max

最后所求血量即為-1*max



import java.util.Scanner;public class MyTest2 {static int max=-1;static boolean flag=true;public static void main(String[] args) {Scanner sc=new Scanner(System.in);int n=sc.nextInt();int m=sc.nextInt();int[][]map=new int[n][m];for(int i=0;i<n;i++){for(int j=0;j<m;j++){map[i][j]=sc.nextInt();}} minblood(map,n-1,m-1,-1,0,0,-1);int ans=-1*max;System.out.println(ans);}private static void minblood(int[][] map,int n,int m,int curr,int midn,int midm,int min) {curr=curr+map[midn][midm];min=Math.min(min, curr);if(midn==n&&midm<m){//到達行邊界未到列邊界 minblood(map,n,m,curr,midn,midm+1,min);}else if(midm==m&&midn<n){ //到達列邊界未到行邊界 minblood(map,n,m,curr,midn+1,midm,min);}else if(midn==n&&midm==m){//到行列邊界if(flag){//第一次到達右下角max=min;flag=false;}else{max=Math.max(min,max);} }else{ //未到達邊界 minblood(map,n,m,curr,midn+1,midm,min);minblood(map,n,m,curr,midn,midm+1,min);}}} /** 3 3 -2 -3 3 -5 -10 1 0 30 -53 3 0 -1 -1 0 -1 -1 0 0 02 2 1 1 1 12 2 -1 0 0 -1 */

總結

以上是生活随笔為你收集整理的完美世界2017/9/26笔试题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。