POJ 1088 滑雪 (DP)

来源:互联网 发布:后三胆码计算软件 编辑:程序博客网 时间:2024/06/05 05:14
还是感叹别人的码写的真好!!以及没事别用C++,,真的比C慢很多。。。。
#include <cstdio>#include <cstring>#include <iostream>using namespace std;int n, m;int map[1000][1000];int ans[1000][1000];         //存储每一个点能滑到的最大距离int dp(int i, int j) {      //局部最优解  if (ans[i][j] > 0)    //避免重复计算    return ans[i][j];  int maxn = 0;  int dir[4][2] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};  int tempi, tempj;  for (int k = 0; k < 4; k++) {    tempi = i + dir[k][0];    tempj = j + dir[k][1];    if (tempi > 0 && tempi <= n && tempj > 0 && tempj <= m &&        map[tempi][tempj] < map[i][j]) {      maxn = max(maxn, dp(tempi, tempj));    }  }  return ans[i][j] = maxn + 1;}int main(void) {  while (~(scanf("%d%d", &n, &m))) {    int answer = 0;    memset(map, 0, sizeof(map));    for (int i = 1; i <= n; i++) {      for (int j = 1; j <= m; j++)        scanf("%d", &map[i][j]);    }    memset(ans, 0, sizeof(ans));    for (int i = 1; i <= n; i++) {   //遍历每一个点      for (int j = 1; j <= m; j++) {        ans[i][j] = dp(i, j);        answer = max(ans[i][j], answer);  //整体最优解      }    }    printf("%d\n", answer);  }  return 0;}

原创粉丝点击