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 |
麻烦大牛给看下。。WA想法就是A[i][j]记录 走i+1步是否能到达j的高度,如果能到,记录其中高度最小的和最后一步的方向。 看A[i][j-p[i+1]]和A[i][j+p[i+1]]决定A[i+1][j]。 #include <math.h> #include <iostream> using namespace std; struct point { int height; char dir; }; void plan(int *p,int len) { int i,j=0; float h=1000; // for (i=0;i<len;i++) //{ //h=h+p[i]; //} // h=ceil(h/2)+1; point **A; A=(point **)malloc((len)*sizeof(point *)); for (i=0;i<len;i++) { A[i]=(point *)malloc(h*sizeof(point)); } for(i=0;i<len;i++) { for (j=0;j<h;j++) { A[i][j].height=0; A[i][j].dir=' '; } } A[0][p[0]].height=p[0]; A[0][p[0]].dir='U'; for (i=1;i<len;i++) for (j=0;j<h;j++) if(j-p[i]>=0 && A[i-1][j-p[i]].height>0) { A[i][j].height=max(j,A[i-1][j-p[i]].height); A[i][j].dir='U'; } else if(j+p[i]<h && A[i-1][j+p[i]].height>0) { if(A[i][j].height>0) { A[i][j].height=min(A[i][j].height,A[i-1][j+p[i]].height); if(A[i][j].height==A[i-1][j+p[i]].height) A[i][j].dir='D'; } else { A[i][j].height=A[i-1][j+p[i]].height; A[i][j].dir='D'; } } if (A[len-1][0].height==0) { cout<<"IMPOSSIBLE"<<endl; } else { char *result; result=(char*)malloc(len*sizeof(char)); int temp=0; for (i=0;i<len;i++) { result[len-1-i]=A[len-1-i][temp].dir; if(result[len-1-i]=='U') { temp=temp-p[len-1-i]; } else { temp=temp+p[len-1-i]; } } for (i=0;i<len;i++) cout<<result[i]; cout<<endl; } } int main() { int num_ins; cin>>num_ins; while(num_ins>0) { num_ins--; int len; cin>>len; int *height; height=(int*)malloc(len*sizeof(int)); int i; for (i=0;i<len;i++) { cin>>height[i]; } plan(height,len); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator