背景 Background
順治帝福臨,是清朝入關後的第一位皇帝。他是皇太極的第九子,生於崇德三年(1638)崇德八年八月二ten+six日在瀋陽即位,改元順治,在位18年。卒於順治十八年(1661),終24歲。
順治即位後,由叔父多爾袞輔政。順治七年,多爾袞出塞射獵,死於塞外。14歲的福臨提前親政。順治帝天資聰穎,讀書勤奮,他吸收先進的漢文化,審時度勢,對成法祖制有所更張,且不顧滿洲親貴大臣的反對,倚重漢官。爲了使新興的統治基業長治久安,他以明之興亡爲借鑑,警惕宦官朋黨爲禍,重視整飭吏治,注意與民休息,取之有節。但他少年氣盛,剛愎自用,急噪易怒,當他寵愛的董妃去世後,轉而消極厭世,終於匆匆走完短暫的人生歷程,英年早逝。他是清朝歷史上唯一公開歸依禪門的皇帝。
描述 Description
順治喜歡滑雪,這並不奇怪, 因爲滑雪的確很刺激。可是爲了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待太監們來載你。順治想知道載一個區域中最長的滑坡。
區域由一個二維數組給出。數組的每個數字代表點的高度。下面是一個例子:
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 Format
輸入的第一行表示區域的行數R和列數C(1 <= R,C <= 500)。下面是R行,每行有C個整數,代表高度h,0<=h<=10000。
輸出格式 Output Format
輸出最長區域的長度。
解析:本題目就是對記憶搜索的很好應用,跟word中的代碼很像。
//============================================================================
// Name : Vijos1011.c
// Author : Gecko
// Version : 1.0
// Copyright : Your copyright notice
// Description : 記憶搜索
//============================================================================
#include <stdio.h>
const int move[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
int r,c;
int h[505][505];
int mem[505][505];
int dp(int x,int y)
{
int max,x2,y2,i;
if(x<0 || y<0 || x>=r || y>=c)
return 0;
if(mem[x][y]>0)
return mem[x][y];
max = 0;
for(i=0;i<4;i++)
{
x2 = x-move[i][0];
y2 = y-move[i][1];
if(h[x][y]>h[x2][y2])
if(dp(x2,y2)>max)
max = dp(x2,y2);
}
return mem[x][y] = max+1;
}
int main()
{
int i,j,ans;
scanf("%d %d",&r,&c);
for (i = 0; i < r; i++)
for (j = 0; j < c; j++)
scanf("%d", &h[i][j]);
ans = 0;
for (i = 0; i < r; i++)
for (j = 0; j < c; j++)
if (dp(i, j) > ans)
ans = dp(i, j);
printf("%d\n", ans);
return 0;
}