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個空格間隔)。
輸出格式:
輸出區域中最長滑坡的長度。
很明顯,這題用動態規劃是比較難做的,所以我們可以考慮dfs,對每個點都搜出它可以經過的最大高度,然後求出每個點的最大值。於是就有了**:
#includeusing namespace std;
#define mmax 0x3f3f3f
#define maxrc 100 + 5
const int dir[4][2] = , , , };
int mmap[maxrc][maxrc];
int dp[maxrc][maxrc];
int r, c;
bool check(int x, int y)
int dfs(int x, int y) }
if(!dp[x][y]) dp[x][y] = 1;
return dp[x][y];
}int main(void) }
dp[1][1] = 1;
int tmp = -mmax;
for(int i = 1; i <= r; i++) }
printf("%d\n", tmp);
return 0;
}
然後你就得了90分~。所以我們需要記憶化搜尋:
#includeusing namespace std;
#define mmax 0x3f3f3f
#define maxrc 100 + 5
const int dir[4][2] = , , , };
int mmap[maxrc][maxrc];
int dp[maxrc][maxrc];
int r, c;
bool check(int x, int y)
int dfs(int x, int y) }
if(!dp[x][y]) dp[x][y] = 1;
return dp[x][y];
}int main(void) }
dp[1][1] = 1;
int tmp = -mmax;
for(int i = 1; i <= r; i++) }
printf("%d\n", tmp);
return 0;
}
美滋滋~ 洛谷 P1434 滑雪
題目描述 michael喜歡滑雪。這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道在乙個區域中最長的滑坡。區域由乙個二維陣列給出。陣列的每個數字代表點的高度。下面是乙個例子 1 2 3 4 5 1...
洛谷 p1434 滑雪
洛谷 p1434 滑雪 1.附上70分 include include int a 100 10 100 10 int vis 100 10 100 10 int r,c int next 2 上 下 左 右 int max 0 void dfs int step,int r1,int c1 int...
洛谷P1434滑雪
題目描述 michael喜歡滑雪。這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道在乙個區域中最長的滑坡。區域由乙個二維陣列給出。陣列的每個數字代表點的高度。下面是乙個例子 1 2 3 4 5 1...