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 |
感觉 用结构体存行列和值 直接从小到大遍历DP就好了。#include"cstdio" #include"cmath" #include"cstring" #include"cstdlib" #include"queue" #include"iostream" #include"algorithm" #include"queue" using namespace std; struct hx { int x,y,l; }h[10005]; int move[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; int n,m; int cmp(const void *a,const void *b) { return (*(struct hx*)a).l-(*(struct hx*)b).l; } int ok(int x,int y) { if(x<0||y<0||x>=n||y>=m) return 0; return 1; } int dx(int x,int y) { return x>y?x:y; } int main() { while(scanf("%d%d",&n,&m)!=-1) { int ans[105][105],v[105][105]; int i,j; for(i=0;i<n;i++) for(j=0;j<m;j++) scanf("%d",&v[i][j]); for(i=0;i<n;i++) for(j=0;j<m;j++) ans[i][j]=1; for(i=0;i<n;i++) { for(j=0;j<m;j++) { h[i*m+j].l=v[i][j]; h[i*m+j].x=i; h[i*m+j].y=j; } } qsort(h,n*m,sizeof(h[0]),cmp); for(i=0;i<n*m;i++) { int xx,yy,k; for(k=0;k<4;k++) { xx=h[i].x+move[k][0]; yy=h[i].y+move[k][1]; if(ok(xx,yy)) { if(v[h[i].x][h[i].y]>=v[xx][yy]) continue; ans[xx][yy]=dx(ans[xx][yy],ans[h[i].x][h[i].y]+1); } } } int max=0; for(i=0;i<n;i++) { for(j=0;j<m;j++) { if(ans[i][j]>max) max=ans[i][j]; } } printf("%d\n",max); } } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator