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(從24開始,在1結束)。當然25-24-23―┅―3―2―1更長。事實上,這是最長的一條。
輸入格式:
輸入的第一行為表示區域的二維陣列的行數r和列數c(1≤r,c≤100)。下面是r行,每行有c個數,代表高度(兩個數字之間用1個空格間隔)。
輸出格式:
輸出區域中最長滑坡的長度。
輸入樣例#1:複製
5 5輸出樣例#1:複製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
25大致思路:
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(從24開始,在1結束)。當然25-24-23―┅―3―2―1更長。事實上,這是最長的一條。
輸入格式:
輸入的第一行為表示區域的二維陣列的行數r和列數c(1≤r,c≤100)。下面是r行,每行有c個數,代表高度(兩個數字之間用1個空格間隔)。
輸出格式:
輸出區域中最長滑坡的長度。
1.我們開兩個陣列,乙個用來存放數字和步數,另乙個存放每個結點可以走到的最噠大高度
2.我們迴圈每個點,從每個點出發進行dp搜尋
3.搜尋的過程中為了避免重複搜尋,我們當乙個點已經搜尋過的時候,可以直接利用這個點已經存放好的最大高度進行計算
4.只需要求出所有最大高度陣列中的最大值,就是答案
**:
#includeusing namespace std;
const int maxn = 110;
struct node arr[maxn][maxn];
int ans[maxn][maxn];
int m, n;
int dir[4][2] =
, ,
,};int maxn = -1;
int maxn2 = -1;
void bfs(int x,int y)
else
bfs(nx, ny);
}arr[nx][ny].step = 1;
}} }
}void find_ans()
} }}int main()
} find_ans();
cout << maxn2;
system("pause");}/*
6 61 2 3 4 5 6
12 11 10 9 8 7
18 17 16 15 14 13
24 23 22 21 20 19
30 29 28 27 26 25
36 35 34 33 32 31
*/
搜尋專題(練習題)
t1題面 首先我們很容易發現乙個操作序列是否合法與操作序列的順序是無關的,選定操作之後加上階乘即可。我們從小到大dfs,對於第i次操作我們把序列分成2 n i 段,每段長度2 i。我們 用check函式 找到序列中不是連續遞增的段,如果這樣的段超過2個,這當然不可能,直接退出。沒有這樣的段就不用操作...
練習題 No 5 揹包問題 動態規劃 記憶化搜尋
有n個揹包和價值分為wi vi 的物品。從這些物品中挑選出總重量不超過w的物品,求所有挑選方案中價值總和的最大值。第一行輸入n 接下來n行的物品 w,v 最後輸入一行w輸出一行價值總和的最大值4 2 31 2 3 42 2 57利用函式引數一定,返回值一定,剪枝掉重複運算的部分。include in...
習題 擺渡車(記憶化搜尋)
題目 有n名同學要乘坐擺渡車從人大附中前往人民大學,第i位同學在第ti分鐘去等車。只有一輛擺渡車在工作,但擺渡車容量可以視為無限大。擺渡車從人大附 發 把車上的同學送到人民大學 再回到人大附中 去接其他同學 這樣往返一趟總共花費m分鐘 同學上下車時間忽略不計 擺渡車要將所有同學都送到人民大學。凱凱很...