POJ1088 (婊戦洩)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ1088 (婊戦洩)相关的知识,希望对你有一定的参考价值。

鏍囩锛?a href='http://www.mamicode.com/so/1/while' title='while'>while   bool   map   memset   琛ㄧず   color   瓒婄晫   鎺掑簭   

璇曚簡涓€涓嬫繁鎼滄瘡涓妭鐐圭粨鏋淭LE浜?/p>

绐佺劧鍙戠幇鏄釜寰堟槑鏄剧殑DP

浠庢渶灏忕殑鑺傜偣寮€濮嬶紝鏇存柊瀹冨洓鍛ㄧ殑鑺傜偣锛屽鏋滃瓨鍦ㄦ瘮瀹冮珮搴﹂珮鐨勮妭鐐癸紝楂樼殑鑺傜偣姝ユ暟 + 1锛屽洜涓鸿妭鐐圭殑鏇存柊鐘舵€佽偗瀹氭槸姣斿畠楂樺害浣庨偅鑾峰彇鐨勶紝鍥犳鏇存柊鏃跺洓鍛ㄦ瘮瀹冧綆鐨勮妭鐐瑰凡缁忕‘瀹氫簡鏄渶澶ф鏁颁簡

// #include<iostream>//POJ 1088婊戦洩
// #include<cstdio>//娣辨悳璇曟瘡鏉¤矾寰?
// #include<cstring>
// #include<algorithm>
// using namespace std;
// const int maxn = 100 + 15;//鍦板浘
// bool vis[maxn][maxn];//鍒ゆ柇姣忎釜鑺傜偣鏄惁璁块棶杩?
// int Map[maxn][maxn];//鍦板浘
// int maxLen = 0;//鏈€闀胯矾寰?
// int arrx[] = 1,-1,0,0;
// int arry[] = 0,0,1,-1;
// int R,C;//R浠h〃琛屾暟,C浠h〃鍒楁暟
// void dfs(int x,int y,int len)//浠?pos(x,y)鍧愭爣寮€濮嬫悳绱?len涓哄綋鍓嶆鏁?
// 
//     maxLen = max(len,maxLen);
//     vis[x][y] = true;//琛ㄧず鍧愭爣宸茶闂繃
//     int newx,newy;//鏂板潗鏍囩殑x,y浣嶇疆
//     for(int i=0;i!=4;++i)
//     
//         newx = x + arrx[i];
//         newy = y + arry[i];//鏂颁綅缃?
//         if(vis[newx][newy])
//             continue;
//         if(newx<0||newx>=R||newy<0||newy>=C)
//             continue;//闃叉瓒婄晫
//         if(Map[newx][newy] < Map[x][y])
//             dfs(newx,newy,len+1);
//         vis[newx][newy] = false;//鍥炴函
//     
// 
// int main()
// 
//     while(cin>>R>>C)
//     
//         for(int i=0;i!=R;++i)
//         
//             for(int j=0;j!=C;++j)
//                 cin>>Map[i][j];//杈撳叆鍦板浘
//         
//         for(int i=0;i!=R;++i)
//         
//             for(int j=0;j!=C;++j)
//             //浠庢瘡涓偣寮€濮嬪皾璇?
//                 memset(vis,false,sizeof(vis));//閲嶇疆璁块棶鍦板浘
//                 dfs(i,j,1);
//             
//         
//         cout<<maxLen<<endl;
//     
// 
////////////////鍔ㄨ(鍔ㄦ€佽鍒?
#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;//缁忓吀DP
int R,C;//R浠h〃琛?C浠h〃鍒?/span>
const int maxn = 100 + 15;
int Map[maxn][maxn];//鍦板浘(鍌ㄥ瓨姣忎釜鐐圭殑鍊?
int cnt[maxn][maxn];
typedef struct

    int x,y;//x浠h〃琛?y浠h〃鍒?/span>
    int h;//楂樺害
node;//姣忎釜鑺傜偣浠h〃浣嶇疆
vector<node> v;
bool cmp(const node& n1,const node& n2)

    return n1.h < n2.h;

int arrx[] = 1,-1,0,0;
int arry[] = 0,0,1,-1;
int main()//鎴戜负浜轰汉DP

    while(cin>>R>>C)
    
        node tmp;
        for(int i=0;i!=R;++i)
        
            for(int j=0;j!=C;++j)
            
                cnt[i][j] = 1;//鍒濆鍖栨鏁颁负1
                tmp.x = i;
                tmp.y = j;
                cin>>tmp.h;
                Map[i][j] = tmp.h;
                v.push_back(tmp);
            
        
        //浠庡皬鍒板ぇ鎺掑簭(h)
        sort(v.begin(),v.end(),cmp);
        for(int i=0;i!=R*C;++i)//瀵逛簬姣忎釜鑺傜偣
        
            for(int j=0;j!=4;++j)
            
                int newx = v[i].x + arrx[j];
                int newy = v[i].y + arry[j];
                if(newx<0||newx>=R||newy<0||newy>=C)
                    continue;//闃叉瓒婄晫
                if(Map[newx][newy] > v[i].h)
                    cnt[newx][newy] = max(cnt[newx][newy],cnt[v[i].x][v[i].y]+1);
            
        
        int maxlen = 0; 
        for(int i=0;i!=R;++i)
        
            for(int j=0;j!=C;++j)
                maxlen = max(maxlen,cnt[i][j]);
        
        cout<<maxlen<<endl;
    

 

以上是关于POJ1088 (婊戦洩)的主要内容,如果未能解决你的问题,请参考以下文章

POJ_1088_dfs

poj1088 经典DP

poj 1088 滑雪

C++9018:1157/POJ1088——滑雪

poj - 1088 - 滑雪(dp)

POJ1088滑雪