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

          PKU 1008 滑雪

          Posted on 2007-05-19 22:19 ZelluX 閱讀(380) 評論(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);
          }
          主站蜘蛛池模板: 澜沧| 南溪县| 大英县| 高淳县| 乐清市| 开阳县| 海宁市| 兴文县| 罗城| 将乐县| 芦山县| 剑河县| 台北市| 应城市| 娱乐| 曲阜市| 彭山县| 孟连| 年辖:市辖区| 越西县| 辰溪县| 沭阳县| 北安市| 故城县| 阜宁县| 临海市| 山丹县| 仁布县| 莱芜市| 武川县| 金川县| 台东县| 措美县| 岱山县| 临夏县| 商洛市| 樟树市| 小金县| 三亚市| 沙坪坝区| 潮州市|