POJ1159解题报告

小弟今天在网上查找POJ1159的优化问题。发现一个还不错的优化算法:

http://hi.baidu.com/albert02/blog/item/89d07d2bbb7645f3e7cd4027.html

但是有点遗憾是:代码不能直接使用,

小弟先真正实现它,在POJ上已过的,其精妙之处就是在于它利用模大地节省了内存。

 

 

<textarea cols="50" rows="15" name="code" class="cpp:showcolumns">#include &lt;iostream&gt; using namespace std; #define MAXSIZE 5002 char aryOfCh[MAXSIZE]; short dp[2][MAXSIZE]; /* dp[i][j]的值表示aryOfCh的前(i + 1)个字符串和逆序aryOfCh的前(j + 1)个字符的最长子字符串长度*/ int main() { int n , i, j; scanf("%d%s", &amp;n, aryOfCh); for (i = 0; i &lt; 2; ++i) for (j = 0; j &lt; n; ++j) dp[i][j] = 0; for (i = 0; i &lt; n; ++i) for (j = 0; j &lt; n; ++j) { if (aryOfCh[i] == aryOfCh[n - 1 - j]) { if (j != 0) dp[i % 2][j] = dp[(i + 1) % 2][j - 1] + 1; else dp[i % 2][j] = 1; } else { if (j != 0) dp[i % 2][j] = max(dp[(i + 1) % 2][j], dp[i % 2][j - 1]) ; else dp[i % 2][j] = dp[(i + 1) % 2][j]; } } printf("%d/n", n - dp[(n - 1)% 2][n - 1]); return 0; }</textarea> 

 

 

你可能感兴趣的:(算法,优化)