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 |
我的n^3的算法超时, 该如何改进呢?确实想不出n^2的算法使用了滚动数组来减少内存.已经郁闷两天了 #include <stdio.h> #define MAXN 501 int a[MAXN], b[MAXN]; int d[2][MAXN][MAXN], cur[2][MAXN][MAXN], path[2][MAXN][MAXN], c[2][MAXN]; int stack[MAXN], top; int m, n; int p1=0, p2=1; void print_rev( int t ) { if( path[p1][n][t] != 0) print_rev( path[p1][n][t] ); printf("%d ", a[t]); } void print() { int t = cur[p1][n][c[p1][n]]; top = 0; while( t ) { stack[top++] = a[t]; t = path[p1][n][t]; } while( top ) { printf("%d ", stack[--top]); } putchar('\n'); } int main() { // freopen("2127.in", "r", stdin); int i, j; scanf("%d", &m); for(i=1; i<=m; ++i) scanf("%d", &a[i]); scanf("%d", &n); for(j=1; j<=n; ++j) scanf("%d", &b[j]); for(i=1; i<=m; ++i) { int k; for(j=1; j<=n; ++j) { if( a[i] == b[j]) // 发现了公共元素 { c[p2][j] = c[p1][j-1]; for(k=1; k<=m; ++k) { d[p2][j][k] = d[p1][j-1][k]; cur[p2][j][k] = cur[p1][j-1][k]; path[p2][j][k] = path[p1][j-1][k]; } int lo, hi, mid; lo = 1; hi = c[p2][j]; while( lo <= hi) { mid = ( lo + hi ) >> 1; if( a[i] > d[p2][j][mid] ) lo = mid + 1; else hi = mid - 1; } d[p2][j][lo] = a[i]; cur[p2][j][lo] = i; if( lo > 1 ) path[p2][j][i] = cur[p2][j][lo-1]; else path[p2][j][i] = 0; if( lo > c[p2][j] ) c[p2][j]++; } else { if( c[p2][j-1] >= c[p1][j] ) { c[p2][j] = c[p2][j-1]; for(k=1; k<=m; ++k) { d[p2][j][k] = d[p2][j-1][k]; cur[p2][j][k] = cur[p2][j-1][k]; path[p2][j][k] = path[p2][j-1][k]; } } else { c[p2][j] = c[p1][j]; for(k=1; k<=m; ++k) { d[p2][j][k] = d[p1][j][k]; cur[p2][j][k] = cur[p1][j][k]; path[p2][j][k] = path[p1][j][k]; } } // end else }// end else } int t = p1; p1 = p2; p2 = t; // 数组滚动 } printf("%d\n", c[p1][n]); print(); //print_rev( cur[p1][n][c[p1][n]]) ; // putchar('\n'); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator