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 |
先前用暴搜32MS,,,后来改dp却变47MS 郁闷..In Reply To:Re:暴搜过的,附上代码。。。 Posted by:ysjjovo at 2010-09-08 22:00:38 #include<iostream> #include<algorithm> using namespace std; #define N 100 int mat[N][N],mat1[N][N]; struct point{ int x,y; }d[4]={{0,-1},{1,0},{0,1},{-1,0}},a[N*N];// void dp(int n,int r,int c) { int i,j; for(i=0;i<n;i++) { for(j=0;j<4;j++) { int t1=a[i].x+d[j].x,t2=a[i].y+d[j].y; if(t1<r&&t1>-1&&t2<c&&t2>-1&&mat[t1][t2]<mat[a[i].x][a[i].y]&&mat1[a[i].x][a[i].y]<mat1[t1][t2]) { mat1[a[i].x][a[i].y]=mat1[t1][t2]; } } mat1[a[i].x][a[i].y]++; } } bool tmp(const point & p1,const point & p2) { return mat[p1.x][p1.y]<mat[p2.x][p2.y]; } int main() { memset(mat1,0,sizeof(mat1)); int r,c; cin>>r>>c; int i,j,n=r*c; for(i=0;i<r;i++) for(j=0;j<c;j++) { cin>>mat[i][j]; a[i*c+j].x=i; a[i*c+j].y=j; } sort(a,a+n,tmp); dp(n,r,c); j=0; for(i=1;i<n;i++)j=mat1[a[j].x][a[j].y]>mat1[a[i].x][a[i].y]?j:i; cout<<mat1[a[j].x][a[j].y]<<endl; return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator