posts - 403, comments - 310, trackbacks - 0, articles - 7
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          PKU 1008 滑雪

          Posted on 2007-05-19 22:19 ZelluX 閱讀(378) 評論(0)  編輯  收藏 所屬分類: Algorithm

          5.19
          第一反應覺得是個簡單的BFS,從最高點開始向四周擴展,最后找到最長的路徑即可。
          結果Wrong Answer,仔細一想,才意識到并不一定是從最高點開始的。考慮得太不周到了。。

          5.31
          原來的程序找不到了。。。重新寫了一遍,居然寫好提交就AC了,恩。這幾天進步挺大哈

          #include <iostream>
          #include 
          <fstream>
          #include 
          <algorithm>
          #include 
          <vector>

          using namespace std;

          const int MAX_HEIGHT = 10000;
          const int MAX_ROWS = 100;
          const int dx[] = {00-11};
          const int dy[] = {1-100};

          struct Point {
              
          int x;
              
          int y;
              
          int height;
          }
          ;

          bool comparePoints(const Point& p1, const Point& p2);
          int main() {
              
          //ifstream fin("pku1088.in");
              int c, r;
              
          int i, j;
              cin 
          >> r >> c;
              
          int h[MAX_ROWS + 2][MAX_ROWS + 2];
              
          int count = 0;
              vector
          <Point> points;
              
          for (i = 1; i <= r; i++{
                  
          for (j = 1; j <= c; j++{
                      cin 
          >> h[i][j];
                      Point temp;
                      temp.x 
          = i;
                      temp.y 
          = j;
                      temp.height 
          = h[i][j];
                      points.push_back(temp);
                  }

              }


              sort(points.begin(), points.end(), comparePoints);
              
              
          for (i = 0; i <= c; i++{
                  h[
          0][i] = MAX_HEIGHT + 1;
                  h[r 
          + 1][i] = MAX_HEIGHT + 1;
              }

              
          for (i = 0; i <= r; i++{
                  h[i][
          0= MAX_HEIGHT + 1;
                  h[i][c 
          + 1= MAX_HEIGHT + 1;
              }


              
          int f[MAX_ROWS + 1][MAX_ROWS + 1];
              
          for (i = 1; i <= r; i++{
                  
          for (int j = 1; j <= c; j++{
                      f[i][j] 
          = 1;
                  }

              }

              
              vector
          <Point>::iterator iter;
              
          for (iter = points.begin(); iter != points.end(); iter++{
                  
          for (i = 0; i < 4; i++{
                      
          int nx = iter->+ dx[i];
                      
          int ny = iter->+ dy[i];
                      
          if (iter->height > h[nx][ny]) {
                          
          if (f[iter->x][iter->y] + 1 > f[nx][ny]) {
                              f[nx][ny] 
          = f[iter->x][iter->y] + 1;
                          }

                      }

                  }

              }


              
          int best = 0;
              
          for (i = 1; i <= r; i++{
                  
          for (j = 1; j <= c; j++{
                      
          if (f[i][j] > best) {
                          best 
          = f[i][j];
                      }

                  }

              }

              cout 
          << best << endl;
              
          return 0;
          }


          bool comparePoints(const Point& p1, const Point& p2) {
              
          return (p1.height > p2.height);
          }
          主站蜘蛛池模板: 临汾市| 锡林郭勒盟| 大荔县| 兰溪市| 龙游县| 文登市| 镇平县| 宣恩县| 华蓥市| 错那县| 理塘县| 吉安市| 建湖县| 康保县| 安岳县| 通州市| 霸州市| 公安县| 会宁县| 东明县| 临夏县| 锡林浩特市| 新余市| 梓潼县| 冀州市| 普定县| 岐山县| 通化市| 义马市| 道孚县| 若尔盖县| 通城县| 九龙坡区| 玛曲县| 瓮安县| 弥勒县| 金门县| 承德县| 夏河县| 武威市| 舟曲县|