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:wa的不行了....达人指点一下...那里错了In Reply To:wa的不行了....达人指点一下...那里错了 Posted by:wavemoon at 2005-08-28 19:33:53 无聊啊,竟然把S和E还要颠倒地给出.无聊 竟然要在这个地方卡人~~~~~ > #include<iostream.h> > #include<stdlib.h> > typedef struct lll > { > long long x,y; > }Line; > Line a[1000]; > long long n; > long long map[1000][1000]; > int cmp(const void*a,const void*b) > { > Line aa,bb; > aa=*(Line*)a; > bb=*(Line*)b; > if(aa.y!=bb.y) { > if(aa.y>bb.y) return 1; > else return -1; > } > else { > if(aa.x>bb.x) return 1; > else if(aa.x==bb.x) return 0; > else return -1; > } > } > > long long dfs(long long ii,long long now)//从下标ii->n中去now个不相交的线段方案数 > { > long long tp,i,j; > if(now==1) return n-ii; > if(map[ii][now]!=-1l) > return map[ii][now]; > tp=0; > for(i=ii;i<n-now;i++) > { > for(j=i+1;j<n-now+1;j++) > if(a[j].x>=a[i].y) > break; > if(j<n) > tp+=dfs(j,now-1); > } > map[ii][now]=tp; > return tp; > } > > > main() > { > long long i,j,edg,k; > while(cin>>n) > { > for(i=0;i<n;i++) > { > cin>>a[i].x>>a[i].y; > if(a[i].x>a[i].y)//x存首端点..y存尾端点.. > { > k=a[i].x; > a[i].x=a[i].y; > a[i].y=k; > } > } > for(i=0;i<=n;i++) > for(j=0;j<=n;j++) > map[i][j]=-1l; > qsort(a,n,sizeof(a[0]),cmp); //按y排序 > edg=a[0].y; //贪心求最大可剩余的线段数 > k=1; > for(i=1;i<n;i++) > if(a[i].x>=edg) > { > k++; > edg=a[i].y; > } > j=dfs(0,k); //选取不相交的k个线段方案数..对应擦除n-k条直线方案数 > cout<<n-k<<" "<<j<<endl; > } > } > Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator