| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:经典DP,贴代码,飘过~~In Reply To:经典DP,贴代码,飘过~~ Posted by:yingxiang720 at 2011-03-28 19:00:36 > #include <iostream>
> #define MAX 20000
> using namespace std;
>
> int v[110][110];
> int dp[110][110];
>
> int cmax(int a,int b,int c,int d)
> {
> if(a >= b && a >= c && a >= d) return a;
> if(b >= a && b >= c && b >= d) return b;
> if(c >= a && c >= b && c >= d) return c;
> if(d >= b && d >= c && d >= a) return d;
> return -1;
> }
>
> int d(int i,int j)
> {
> int up = -1,dn = -1,le = -1,rt = -1;
> if(dp[i][j] >= 0) return dp[i][j];
> if(v[i][j] > v[i - 1][j]) up = d(i - 1,j);
> if(v[i][j] > v[i + 1][j]) dn = d(i + 1,j);
> if(v[i][j] > v[i][j - 1]) le = d(i,j - 1);
> if(v[i][j] > v[i][j + 1]) rt = d(i,j + 1);
> if(up == -1 && dn == -1 && le == -1 && rt == -1)
> return dp[i][j] = 1;
> else
> return dp[i][j] = 1 + cmax(up,dn,le,rt);
> }
>
> int main()
> {
> int r,c,i,j,smax;
> while(scanf("%d%d",&r,&c) != EOF)
> {
> memset(dp,-1,sizeof(dp));
> memset(v,MAX,sizeof(v));
> smax = -1;
> for(i = 1;i <= r;i++)
> for(j = 1;j <= c;j++) scanf("%d",&v[i][j]);
> for(i = 1;i <= r;i++)
> for(j = 1;j <= c;j++)
> {
> dp[i][j] = d(i,j);
> if(smax < dp[i][j]) smax = dp[i][j];
> }
> printf("%d\n",smax);
> }
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator