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:liuyuyangfoam at 2005-12-23 03:23:11 > // 2533 Longest Ordered Subsequence > #include <stdio.h> > #include <stdlib.h> > > int lcs_length(int x[],int y[],int n); > int cmp (const void *a,const void *b); > void copy(int src[],int dest[],int n); > /* > void qsort(int a[],int i,int j); > int findpivot(int a[],int i,int j); > int partition(int a[],int l,int r,int pivot); > void swap(int a[],int i,int j); > */ > int main() > { > int a[1001],tmp[1001]; // 0 to 10000 > int n; // 1 <= N <= 1000 > int i; > scanf("%d",&n); > for (i=0;i<n;i++) { > scanf("%d",&a[i]); > } > copy(a,tmp,n); > qsort(tmp,n,sizeof(int),cmp); > printf("%d\n",lcs_length(a,tmp,n)); > return 0; > } > > int lcs_length(int x[],int y[],int n) { > int i,j; > int c[n+1][n+1]; > for (i=1;i<=n;i++) > c[i][0] = 0; > for (j=0;j<=n;j++) > c[0][j] = 0; > for (i=1;i<=n;i++) { > for (j=1;j<=n;j++) { > if (x[i-1]==y[j-1]) { > c[i][j] = c[i-1][j-1]+1; > } else if (c[i-1][j] >= c[i][j-1]) { > c[i][j] = c[i-1][j]; > } else { > c[i][j] = c[i][j-1]; > } > } > } > return c[n][n]; > } > > int cmp (const void *a,const void *b) > { > return *(int *)a - *(int *)b; > } > > void copy(int src[],int dest[],int n) > { > int i; > for(i=0;i<n;i++) dest[i]=src[i]; > } 排序要保证是升序,所以排完序应该把相同的元素处理掉吧。不然就是1 2 2这样的都得不出正确答案 Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator