国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

滑雪 POJ - 1088

2019-11-08 03:15:14
字體:
來源:轉載
供稿:網友

Description Michael喜歡滑雪百這并不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待升降機來載你。Michael想知道載一個區域中最長底滑坡。區域由一個二維數組給出。數組的每個數字代表點的高度。下面是一個例子 1 2 3 4 5

16 17 18 19 6

15 24 25 20 7

14 23 22 21 8

13 12 11 10 9

一個人可以從某個點滑向上下左右相鄰四個點之一,當且僅當高度減小。在上面的例子中,一條可滑行的滑坡為24-17-16-1。當然25-24-23-…-3-2-1更長。事實上,這是最長的一條。 Input 輸入的第一行表示區域的行數R和列數C(1 <= R,C <= 100)。下面是R行,每行有C個整數,代表高度h,0<=h<=10000。 Output 輸出最長區域的長度。 Sample Input 5 5 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 Sample Output 25 問題分析 假設已經實現函數:int find(int x,int y)返回從點(x,y)的最長坡道的長度,那么我們只需要遍歷題目給出的數組,計算長度取最大值即為最終答案。 函數實現: 我們利用temp[i][j]數組判斷是否已經計算過當前點(i,j)避免重復計算,這樣能夠節省時間。如果已經計算過當前節點直接返回temp[i][j]中存儲的值。 接著調用find函數計算上下左右四個節點中滿足條件的節點,并取最大值max。 返回max加1。 代碼實現

#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int array[101][101];int temp[101][101];int find(int x,int y,int R,int C){ int maxi=0; if(temp[x][y]!=1)return temp[x][y]; if(y-1>=0&&array[x][y]>array[x][y-1])maxi=max(maxi,temp[x][y-1]=find(x,y-1,R,C)); if(x-1>=0&&array[x][y]>array[x-1][y])maxi=max(maxi,temp[x-1][y]=find(x-1,y,R,C)); if(y+1<C&&array[x][y]>array[x][y+1])maxi=max(maxi,temp[x][y+1]=find(x,y+1,R,C)); if(x+1<R&&array[x][y]>array[x+1][y])maxi=max(maxi,temp[x+1][y]=find(x+1,y,R,C)); return maxi+1;}int main(){ int R,C; while(scanf("%d %d",&R,&C)==2){ for(int i=0;i<R;i++) for(int j=0;j<C;j++){ scanf("%d",&array[i][j]); temp[i][j]=1; } int maxi=0; for(int i=0;i<R;i++) for(int j=0;j<C;j++) maxi=max(maxi,find(i,j,R,C));
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 涪陵区| 马鞍山市| 平原县| 睢宁县| 磴口县| 吉木萨尔县| 南陵县| 鹤峰县| 个旧市| 清新县| 馆陶县| 常德市| 镇雄县| 印江| 苍南县| 柳林县| 闵行区| 莆田市| 皋兰县| 双牌县| 巴南区| 称多县| 峨眉山市| 米易县| 泊头市| 蕲春县| 渝中区| 南靖县| 利津县| 九江县| 利津县| 天长市| 凤凰县| 芜湖县| 林州市| 广饶县| 海盐县| 贵州省| 东乌珠穆沁旗| 九龙县| 长寿区|