| ||||||||||
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 |
请问这题能否这样子递推的做;还有是为什么这样子会超时,不也是n2的算法吗?thx~tle的代码: #include < iostream > #include < stdio.h > using namespace std; short a[ 5010 ][ 5010 ] = { 0 } ; char p[ 5010 ]; int main() { int l; int i, j , t, k = 1 ; while (scanf( " %d%s " , & l,p) != EOF) { k = 1 ; // 下面for语句产生l=5000的测试数据; /**/ /* l = 5000; for(i = 0; i < 5000; i++) p[i] = 'b'; p[0] = '1'; p[i] = '\0'; */ for (t = 1 ; t < l; t ++ ) { for (i = 0 ;i < l - t;i ++ ) { j = i + t; if (p[i] == p[j]) { // k++; // 把下面的换成k++对 l=5000 这组数据时间就不用那么多了,为什么啊?不都是一次运算么,运算时间不是相同的?自己觉得很奇怪... a[i][j] = a[i + 1 ][j - 1 ]; } else { if (a[i + 1 ][j] < a[i][j - 1 ])a[i][j] = a[i + 1 ][j] + 1 ; else a[i][j] = a[i][j - 1 ] + 1 ; } } ; } ; printf( " %d\n " , a[ 0 ][l - 1 ]); } return 0 ; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator